使用16位灰度值填充位图而不缩小尺寸

时间:2013-01-29 13:15:53

标签: c# winforms grayscale

我有一个包含原始图像数据的文件。每个像素都表示为16 bit (0-65536)值。

我正在将所需的数据部分读入ushort[]数组。在做了一些图像处理之后,我需要以某种方式向用户显示这个图像。我绘制8位灰度没有问题(我只是设置每个像素的R,G和B值相同),但不能处理16位/像素灰度图像。

另一种可能性是使用PixelFormat.Format48bppRgb并将r,g和b设置为相同的16位grascale,但我找不到。

我发现了一些使用unsafe代码和LockBits的代码段,但无法让它们发挥作用。

有没有办法绘制16位灰度图像而不将其缩小到8位?

请向我提供一个代码段。

编辑:这就是我设置8位格式的方法:

Array img;
//var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
if (bitsPerElement == 8)
{
    //img = Array.CreateInstance(typeof(byte), bitmapHeigth*bitmapWidth);
    img = GetLayerBytes<byte>(LayerNum) as byte[];
}
else
{
    img = GetLayerBytes<UInt16>(LayerNum) as UInt16[];
}

int ind = 0;
for (int heigth = 0; heigth < bitmapHeigth; heigth++)
{
    for (int width = 0; width < bitmapWidth; width++)
    {
        int current = Convert.ToInt32(img.GetValue(ind));
        ind++;

        bmp.SetPixel(width, heigth, Color.FromArgb(current, current, current));
    }
}
pictureBox1.Image = bmp;

1 个答案:

答案 0 :(得分:0)

引用Hans Passant以防有人正在寻找答案:

  

这些像素格式是在GDI +中定义的,具有期望值   总有一天它可能会有足够的显示进展   技术。我们还在等待。它实际上是另一个   液晶面板的方式无法显示所有可能的1600万   24rgb格式的颜色。实际上看到了一个灰色的水平   16位格式需要专门的硬件和训练有素的眼睛,   你在医院找到的那种。使用匹配的非标准图像   格式,如DICOM。您可以从Lead Tools这样的供应商处购买。