在MFC编程中,用OpenCV来处理图像时,可能会进行Bitmap与IplImage之间的转换;所以在此留个记号,以免下次再用到的时候,还要去找。
IplImage* BitmapToIplImage(HBITMAP hBmp)
{
BITMAP bmp;
GetObject(hBmp, sizeof(BITMAP), &bmp);
int depth = (bmp.bmBitsPixel == 1) ? IPL_DEPTH_1U : IPL_DEPTH_8U;
int nChannels = (bmp.bmBitsPixel == 1) ? 1 : bmp.bmBitsPixel/8;
IplImage* img = cvCreateImage(cvSize(bmp.bmWidth,bmp.bmHeight), depth, nChannels);
BYTE *pBuffer = new BYTE[bmp.bmHeight*bmp.bmWidth*nChannels];
GetBitmapBits(hBmp, bmp.bmHeight*bmp.bmWidth*nChannels, pBuffer);
memcpy(img->imageData, pBuffer, bmp.bmHeight*bmp.bmWidth*nChannels);
delete pBuffer;
IplImage *dst = cvCreateImage(cvGetSize(img), img->depth,3);
cvCvtColor(img, dst, CV_BGRA2BGR);
cvReleaseImage(&img);
return dst;
}
如果要从CBitmap转为IplImage,可以先将CBitmap转为BITMAP,再由BITMAP转为IplImage;
// CBitmap 转为 BITMAP CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP); BITMAP bmp; bitmap.GetBitmap(&bmp); // CBitmap与HBITMAP间的转换 // CBitmap转为HBITMAP CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP); HBITMAP bmp = HBITMAP(bitmap); // HBITMAP转为CBitmap HBITMAP hbitmap; CBitmap bitmap; bitmap.Attach(hbitmap);
6147

被折叠的 条评论
为什么被折叠?



