我有一个包含原始图像数据的文件。每个像素都表示为16 bit (0-65536)
值。
我正在将所需的数据部分读入一个ushort[]
数组。在做了一些图像处理之后,我需要以某种方式向用户展示这个图像。我绘制 8 位灰度没有问题(我只是将每个像素的 R、G 和 B 值设置为相同),但无法处理 16 位/像素灰度图像。
另一种可能性是使用PixelFormat.Format48bppRgb
并将 r,g 和 b 设置为相同的 16 位 grascale,但我找不到如何。
我发现了一些使用unsafe
code 和的代码片段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;