将图像16位灰度转换为位图16位灰度(构造函数错误)
本文关键字:灰度 16位 构造函数 错误 图像 转换 位图 | 更新日期: 2023-09-27 17:51:07
我尝试将图像(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不能与图像16位灰度一起工作,以及为什么将图像转换为Bitmap工作。
谢谢
PixelFormat。灰度是一种累赘的图像格式。商品硬件,你会在你的机器中找到的那种,甚至不能远接近能够准确地渲染这样一个位图。它是基于rgb的,每个颜色通道有8位,产生1600万种不同的颜色。其中只有256个是灰色的。更糟糕的是商品液晶显示器,它们通常只能区分6位色彩信息,实际上只能显示64个灰色阴影。将65,536个灰度映射到256或64当然会导致批次的细节丢失。
它确实在非常专业的应用程序中使用。一个是放射成像,例如显示x射线图像。但他们也有非常昂贵的显示器来显示这样的图像。不平凡的电子元件是D/A转换器,一个16位转换器,可以运行在~250兆赫,花费很多很多钱。它们还使用专门的图像文件格式,DICOM是常见的,GDI+中包含的编解码器不支持这些格式。
这里有一个重大的责任,这在美国一直是一个问题,当你在商用硬件上显示这样的医学图像时,无论谁看到它,都无法看到足够的细节来正确诊断,比如说,肿瘤的发展。这本身就足以阻止微软支持像素格式的像素格式转换,他们不想卷入这样的诉讼。
GDI+支持存储这样的映像。您可以使用Bitmap.LockBits()获得像素数据。适合足够的图像处理应用。但是,任何尝试为这样的图像创建图形对象或在这样的图像上使用Graphics. drawimage()都会导致异常。这就是Bitmap(Image)构造函数所做的。寻找像LeadTools这样的供应商来支持库。