I'm trying to implement a dicom viewer. For dicom file I can set window width and window center via fo-dicom framework. But sometimes I need set the parameters for a bitmap. I have found how to can do it, but it doesn't work right.
private Bitmap setWinWidthAndCenter(Bitmap bmp)
{
int center = (int)vsWindowCenter.Value;
int width = (int)vsWindowWidth.Value;
var wyMin = center - 0.5 - (width - 1) / 2;
var wMax = center - 0.5 + (width - 1) / 2;
System.Drawing.Color color;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
color = bmp.GetPixel(i, j);
if (color.R <= wyMin)
color = System.Drawing.Color.FromArgb(0, 0, 0);
else if (color.R > wMax)
color = System.Drawing.Color.FromArgb(255, 255, 255);
else
{
var val = (int)(((color.R - (center - 0.5)) / (width - 1) + 0.5) * 255);
color = System.Drawing.Color.FromArgb(val, val, val);
}
bmp.SetPixel(i, j, color);
}
}
return bmp;
}
May be anyone know what is wrong.
EDIT 1:
A left image is the expected result which was received via fo-dicom library. A right image is the result after processing via my function.