C# 使用16位灰度值填充位图而不缩小比例

C# 使用16位灰度值填充位图而不缩小比例,c#,winforms,grayscale,C#,Winforms,Grayscale,我有一个原始图像数据文件。每个像素表示为16位(0-65536)值 我正在将所需的部分数据读入ushort[]数组。在做了一些图像处理后,我需要以某种方式向用户显示这个图像。我画一幅8位的灰度图没有问题(我只是把每个像素的R、G和B值设置得一样),但不能处理16位/像素的灰度图 另一种可能是使用PixelFormat.Format48bppRgb并将r、g和b设置为相同的16位grascale,但我找不到如何设置 我发现一些代码片段使用了不安全的代码和锁位,但无法使它们正常工作 有没有办法在不将

我有一个原始图像数据文件。每个像素表示为
16位(0-65536)

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

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

我发现一些代码片段使用了
不安全的
代码和
锁位
,但无法使它们正常工作

有没有办法在不将16位灰度图像缩小到8位的情况下绘制16位灰度图像

请给我一个代码片段

编辑:这是我设置8位grascales的方式:

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;
阵列img;
//var data=bmp.LockBits(新矩形(0,0,bmp.Width,bmp.Height),ImageLockMode.ReadWrite,bmp.PixelFormat);
如果(比特相关==8)
{
//img=Array.CreateInstance(typeof(byte),bitmapHeigth*bitmapWidth);
img=GetLayerBytes(LayerNum)作为字节[];
}
其他的
{
img=获取层红细胞(LayerNum)作为UInt16[];
}
int ind=0;
对于(int heigth=0;heigth
如果有人在寻找答案,请引用:


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


@我用文字描述了我是如何尝试的。我添加了一个代码段,它不能完成16位值所需的工作。这有什么帮助吗?这些像素格式是在GDI+中定义的,期望有一天随着显示技术的充分进步它可能会有用。我们仍在等待。事实上,由于LCD面板无法显示24rgb格式的所有1600万种可能的颜色,这就导致了另一种情况。实际上,以16位格式看到灰度级需要专门的硬件和训练有素的眼睛,就像你在医院看到的那样。使用匹配的非标准图像格式,如DICOM。您可以从Lead Tools之类的供应商处购买此信息。@HansPassant如果您将您的评论作为答案发布,我将接受,因为这是一个答案