繁体   English   中英

将图像16位灰度转换为位图16位灰度(构造函数错误)

[英]Convert Image 16bits grayscale to Bitmap 16bits grayscale (Constructor error)

我尝试将图像(16位灰度)转换为位图(16位灰度)。

本示例不起作用(Exception:ArgumentException)

    private Mat ToMat16bGrayscale(Image im)
    {

        Bitmap bmp2 = new Bitmap(im); 

    }

但是这个例子有效:

 private Mat ToMat16bGrayscale(Image im)
 {

   //Cast obligatoire la création ou la copie d'une bitmap ne   fonctionne pas ici... 
                Bitmap bmp = (Bitmap)(im);
                Bitmap new_bmp = (Bitmap)bmp.Clone(); 
 }

我想知道为什么构造函数Bitmap不能与Image 16bits灰度一起使用,以及为什么将Image转换为Bitmap可以工作。

谢谢 :)

PixelFormat.Format16bppGrayscale是一种白象图像格式。 您可以在机器中找到的那种商品硬件,甚至不能接近准确地渲染这样的位图。 它基于RGB,每个颜色通道有8位,产生1600万种不同的颜色。 其中只有256种是灰色阴影。 更糟糕的是商用LCD显示器,它们通常不能做得比使6位色彩信息明显不同要好得多,实际上只能渲染不超过64种阴影。 将65,536种灰度映射到256或64,当然会导致丢失很多细节。

确实在非常专业的应用程序中使用了它。 一种是放射成像,例如显示X射线图像。 但是他们也有非常昂贵的监视器来显示这样的图像。 至关重要的电气组件是D / A转换器,它是一种可以在约250 MHz的频率下运行的16位转换器,成本不菲。 它们还使用特殊的图像文件格式,DICOM是常见的,GDI +附带的编解码器不支持其他格式。

这里有很大的责任,在美国总是一个问题,当您在商品硬件上显示这样的医学图像时,无论看谁,都将无法看到足够的细节来正确诊断(例如正在发展的肿瘤)。 其本身足以阻止Microsoft支持将像素格式转换为像素格式,因此他们不希望参与此类诉讼。

GDI +支持存储此类图像。 您可以使用Bitmap.LockBits()获取像素数据。 足够适合图像处理应用程序。 但是,任何为此类图像创建Graphics对象或在此类图像上使用Graphics.DrawImage()的尝试都会导致异常。 这就是Bitmap(Image)构造函数的作用。 寻找像LeadTools这样的供应商来提供库支持。

暂无
暂无

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

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