OpenCV中IplImage 与 Gdiplus 中Bitmap之间的相互转换

来源:互联网 发布:软件测试和网络工程师 编辑:程序博客网 时间:2024/05/16 04:53
Cpp代码  
  1. // pIplImage 需要外部释放 Mosesyuan   
  2.  void CGeneral::BitmapToIplImage(Bitmap* pBitmap, IplImage* &pIplImg)   
  3. {   
  4.     if (!pBitmap)   
  5.     {   
  6.         return;   
  7.     }   
  8.     if(pIplImg)   
  9.     {   
  10.         cvReleaseImage(&pIplImg);   
  11.         pIplImg = NULL;   
  12.     }   
  13.     BitmapData bmpData;   
  14.     Rect rect(0,0,pBitmap->GetWidth(),pBitmap->GetHeight());   
  15.     pBitmap->LockBits(&rect, ImageLockModeRead, PixelFormat24bppRGB, &bmpData);   
  16.     IplImage* tempImg = cvCreateImage(cvSize(pBitmap->GetWidth(), pBitmap->GetHeight()), IPL_DEPTH_8U, 3);   
  17.     BYTE* temp = (bmpData.Stride>0)?((BYTE*)bmpData.Scan0):((BYTE*)bmpData.Scan0+bmpData.Stride*(bmpData.Height-1));   
  18.     memcpy(tempImg->imageData, temp, abs(bmpData.Stride)*bmpData.Height);   
  19.     pBitmap->UnlockBits(&bmpData);   
  20.     pIplImg = tempImg;   
  21. //判断Top-Down or Bottom-Up   
  22.   
  23.     if (bmpData.Stride<0)          
  24.   
  25.         cvFlip(pIplImg, pIplImg);               
  26. }   
  27. OpenCV中 IplImage 转 Gdiplus::Bitmap   
  28.   
  29. // pBitmap 同样需要外部释放!!   
  30.   
  31. void CGeneral::IplImageToBitmap(IplImage* pIplImg, Bitmap* &pBitmap)   
  32. {   
  33.     if(!pIplImg)   
  34.         return;          
  35.   
  36.     BITMAPINFOHEADER bmih;   
  37.     memset(&bmih, 0, sizeof(BITMAPINFOHEADER));   
  38.     bmih.biSize = sizeof(BITMAPINFOHEADER);   
  39.     bmih.biWidth = pIplImg->width;   
  40.     bmih.biHeight = pIplImg->height;   
  41.     bmih.biPlanes = 1;   
  42.     bmih.biBitCount = pIplImg->depth*pIplImg->nChannels;   
  43.     bmih.biSizeImage = pIplImg->imageSize;   
  44.   
  45.     BYTE* pData=new BYTE[bmih.biSizeImage];   
  46.     memcpy(pData, pIplImg->imageDataOrigin, pIplImg->imageSize);   
  47.   
  48.     if (pBitmap)   
  49.     {   
  50.         delete pBitmap;   
  51.         pBitmap = NULL;   
  52.     }   
  53.     pBitmap = Gdiplus::Bitmap::FromBITMAPINFO((BITMAPINFO*)&bmih, pData);   
  54.   
  55. }  
原创粉丝点击