如何将单 channel IplImage(灰度)深度 = 8 转换为位图?
以下代码运行,但以 256 色而不是灰度显示图像。 (颜色与原版差别很大)
btmap = gcnew Bitmap(
cvImg->width ,
cvImg->height ,
cvImg->widthStep ,
System::Drawing::Imaging::PixelFormat::Format8bppIndexed,
(System::IntPtr)cvImg->imageData)
;
我相信我的问题在于 PixelFormat。我尝试将图像缩放为 16 位并将像素格式设置为 16bppGrayscale,但这会在上传图像时使表单崩溃。
目标是 C# 形式的 PicturePox。谢谢。
最佳答案
您需要创建 ColorPalette 实例,用灰度调色板填充它并分配给 btmap->Palette 属性。
编辑:实际上,创建 ColorPalette 类有点棘手,最好直接在 btmap->Palette 中修改颜色条目。将这些条目设置为 RGB(0,0,0)、RGB(1,1,1) ... RGB(255,255,255)。像这样的东西:
颜色调色板^调色板= btmap->调色板;
数组<颜色>^ 条目 = 调色板->条目;
对于 (int i = 0; i < 256;++i)
{
条目[i] = 颜色::FromArgb(i, i, i);
}
关于image - 如何将单 channel IplImage* 转换为位图^,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3656369/