如何将单通道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。谢谢。
答案 0 :(得分:1)
您需要创建ColorPalette实例,用灰度调色板填充它并分配给btmap-> Palette属性。
编辑:实际上,创建ColorPalette类有点棘手,最好直接在btmap-> Palette中修改颜色条目。将这些条目设置为RGB(0,0,0),RGB(1,1,1)... RGB(255,255,255)。像这样:
ColorPalette^ palette = btmap->Palette; array<Color>^ entries = palette->Entries; for ( int i = 0; i < 256; ++i ) { entries[i] = Color::FromArgb(i, i, i); }
答案 1 :(得分:1)
int intStride = (AfterHist.width * AfterHist.nChannels + 3) & -4;
Bitmap BMP = new Bitmap(AfterHist.width,
AfterHist.height, intStride,
PixelFormat.Format24bppRgb, AfterHist.imageData);
这种方法对于创建IPLimage的位图是正确的。