繁体   English   中英

用16位灰度值填充位图,而无需缩小

[英]Fill bitmap with 16 bit grayscale values without downscale

我有一个包含原始图像数据的文件。 每个像素都表示为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;

如果有人正在寻找答案,请引用Hans Passant的话:

这些像素格式是在GDI +中定义的,期望有朝一日,随着显示技术的充分发展,它可能会很有用。 我们仍在等待。 实际上,LCD面板无法以24rgb格式显示所有可能的1600万种颜色,因此发生了另一种变化。 实际上,以16位格式查看灰度级需要专用的硬件和训练有素的眼睛,就像您在医院中看到的那样。 具有匹配的非标准图像格式,例如DICOM。 您可以从诸如Lead Tools之类的供应商处购买。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM