将DIB转换为IplImage(核心代码)

本文作者:longlongago     博客地址:http://blog.csdn.net/longlongago2000

在以取得DIB的情况下,可以将DIB转化为IplImage,核心代码如下:

byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据  //得到图像数据放到p数组中  GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p,  (LPBITMAPINFO) &bih, DIB_RGB_COLORS);//获取位图数据

//创建IplImage的图像头信息,注意通道数要和原DIB通道数一致这里是4通道。 

 m_SnapImage = cvCreateImageHeader( cvSize( bih.biWidth, bih.biHeight)   , IPL_DEPTH_8U, 4 );  

//将m_SnapImage->imageData的指针指向p数据区的首地址  cvSetData( m_SnapImage, p, bmp.bmWidthBytes);  cvFlip( m_SnapImage, m_SnapImage, 0 );//翻转图像数组

IplImage * tpImg=m_SnapImage;

 pImg = cvCreateImage( cvGetSize(tpImg), IPL_DEPTH_8U, 3);  //将4通道转换成3通道,如果不转换显示将出错。  cvCvtColor(tpImg,pImg,CV_BGR2RGB);  cvCvtColor(pImg,pImg,CV_RGB2BGR);

你可能感兴趣的:(byte,colors)