我有一个包含原始图像数据的文件。每个像素都表示为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;
答案 0 :(得分:0)
引用Hans Passant以防有人正在寻找答案:
这些像素格式是在GDI +中定义的,具有期望值 总有一天它可能会有足够的显示进展 技术。我们还在等待。它实际上是另一个 液晶面板的方式无法显示所有可能的1600万 24rgb格式的颜色。实际上看到了一个灰色的水平 16位格式需要专门的硬件和训练有素的眼睛, 你在医院找到的那种。使用匹配的非标准图像 格式,如DICOM。您可以从Lead Tools这样的供应商处购买。