Как конвертировать одноканальный IplImage * в Bitmap ^ - PullRequest
0 голосов
/ 07 сентября 2010

Как я могу преобразовать одноканальный IplImage (оттенки серого), глубина = 8, в растровое изображение?Следующий код выполняется, но отображает изображение в 256 цветах, а не в оттенках серого.(Цвет очень отличается от оригинала)

btmap = gcnew Bitmap(
 cvImg->width , 
 cvImg->height , 
 cvImg->widthStep , 
 System::Drawing::Imaging::PixelFormat::Format8bppIndexed,
 (System::IntPtr)cvImg->imageData)
 ;

Я считаю, что моя проблема заключается в PixelFormat.Я пытался масштабировать изображение до 16 бит и установить пиксельный формат 16bppGrayscale, но это приводит к сбою формы при загрузке изображения.

Назначением является PicturePox в форме C #. Спасибо.

Ответы [ 2 ]

1 голос
/ 29 ноября 2010
 int intStride = (AfterHist.width * AfterHist.nChannels + 3) & -4;
            Bitmap BMP = new Bitmap(AfterHist.width,
                            AfterHist.height, intStride,
                            PixelFormat.Format24bppRgb, AfterHist.imageData);

этот способ является правильным для создания растрового изображения IPLimage.

1 голос
/ 07 сентября 2010

Вам нужно создать экземпляр ColorPalette, заполнить его палитрой градаций серого и присвоить свойству btmap-> Palette.

Редактировать: На самом деле создание класса ColorPalette немного сложнее, лучше изменить записи цвета непосредственнов btmap-> палитра.Установите для этих записей значение 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);

}
...