将IplImage转换为DIB

来源:互联网 发布:c51和c语言的区别 编辑:程序博客网 时间:2024/05/22 21:27

 

Opencv中将IplImage转换为DIB:

view plaincopy to clipboardprint?
  1. HBITMAP CGameDlg::IplIamgeToDIB(IplImage *pImg,int Size)  
  2.   
  3. {  
  4.   
  5.   
  6.   
  7.     HDC hDC = ::CreateCompatibleDC(0);  
  8.   
  9.     BYTE tmp[sizeof(BITMAPINFO)+255*4];  
  10.   
  11.     BITMAPINFO *bmi = (BITMAPINFO*)tmp;  
  12.   
  13.     HBITMAP hBmp;  
  14.   
  15.     int i;  
  16.   
  17.     memset(bmi,0,sizeof(BITMAPINFO));  
  18.   
  19.     bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  
  20.   
  21.     bmi->bmiHeader.biWidth = pImg->width;  
  22.   
  23.     bmi->bmiHeader.biHeight = -pImg->height;  
  24.   
  25.     bmi->bmiHeader.biPlanes = Size;  
  26.   
  27.     bmi->bmiHeader.biBitCount = pImg->nChannels * pImg->depth;  
  28.   
  29.     bmi->bmiHeader.biCompression = BI_RGB;  
  30.   
  31.     bmi->bmiHeader.biSizeImage = pImg->width*pImg->height*1;  
  32.   
  33.     bmi->bmiHeader.biClrImportant =0 ;  
  34.   
  35.     switch(pImg->nChannels * pImg->depth)  
  36.   
  37.     {  
  38.   
  39.     case 8 :  
  40.   
  41.     for(i=0 ; i < 256 ; i++)  
  42.   
  43.     {  
  44.   
  45.     bmi->bmiColors[i].rgbBlue = i;  
  46.   
  47.     bmi->bmiColors[i].rgbGreen= i;  
  48.   
  49.     bmi->bmiColors[i].rgbRed= i;  
  50.   
  51.     }  
  52.   
  53.     break;  
  54.   
  55.     case 32:  
  56.   
  57.     case 24:  
  58.   
  59.     ((DWORD*) bmi->bmiColors)[0] = 0x00FF0000; /* red mask */  
  60.   
  61.     ((DWORD*) bmi->bmiColors)[1] = 0x0000FF00; /* green mask */  
  62.   
  63.     ((DWORD*) bmi->bmiColors)[2] = 0x000000FF; /* blue mask */  
  64.   
  65.     break;  
  66.   
  67.     }  
  68.   
  69.     hBmp = ::CreateDIBSection(hDC,bmi,DIB_RGB_COLORS,NULL,0,0);  
  70.   
  71.     SetDIBits(hDC,hBmp,0,pImg->height,pImg->imageData,bmi,DIB_RGB_COLORS);  
  72.   
  73.     ::DeleteDC(hDC);  
  74.   
  75. return hBmp;  
  76.   
  77.   
  78.   
  79. }  

此文章只供参考,转载请注明:本文作者:longlongago     博客地址:http://blog.csdn.net/longlongago2000

有问题可留言或发邮件讨论。

 

原创粉丝点击