如何将16位灰度图像显示到图片框中?

时间:2017-06-12 04:32:46

标签: c# image

我有一个包含图片数据的ushort列表,我想在图片框中显示此图片,因此我首先将其加载到MemoryStream然后在FromStream中使用image方法} class将其加载到pictureBox

.
.
MemoryStream ms = new MemoryStream(pixels24.ToArray()); //pixels24 is ushort[]
this.DicomImage.Image = System.Drawing.Image.FromStream(ms);
.
.

如果我运行此错误显示:

  

错误1最佳重载方法匹配   'System.IO.MemoryStream.MemoryStream(int)'有一些无效的参数

我知道MemoryStream不能将ushort数组作为输入,它需要byte []而不是...... 那么如何将ushort数组中表示的图像放到图片框中呢?

2 个答案:

答案 0 :(得分:0)

假设您的ushort值介于0和255之间,

checked
{
    ushort[] vals = pixels24.ToArray();
    var imgbytes = (from val in vals
                 select (byte)val).ToArray();

    // Your Code
    MemoryStream ms = new MemoryStream(imgbytes); 
    this.DicomImage.Image = System.Drawing.Image.FromStream(ms);
}

checked值大于255时,ushort块用于在溢出期间抛出异常。

答案 1 :(得分:0)

您的愿望有点奇怪,因为根据参考文献,ushort的范围大于Byte所以如果您甚至将ushort数组转换为byte数组可能会遇到数据丢失问题 system.overflowexception 。如果你可以处理这个问题并做一些处理异常的代码,你可以简单地转换数组。

byte.MinValue = 0 / byte.MaxValue = 255

<强> ushort.MinValue = 0 / ushort.MaxValue = 65535

这是一个简单的例子

for (var i = 0; i <= 9; i++)
 {
    try
     {
      bytPixle24[i] = Convert.ToByte(pixel24[i]);
     }
    catch (System.OverflowException ex)
     {
       // ...
     }
 }