在写mfc程序时如果用到opencv,肯定会用到这两个之间的转化。在网上找了好多,几乎都一样,我的情况稍微特殊,找了半天也没合适的,MD,一气之下,自己跟踪进去CvvImage::DrawToHDC,
void IplImage2CBitmap(Iplimage* ipg_src)
{
CBitmap* m_pBitmap=new CBitmap;
if (ipg_src->depth==IPL_DEPTH_8U)
{
uchar buffer[sizeof(BITMAPINFOHEADER) + 1024];
BITMAPINFO* bmi = (BITMAPINFO*)buffer;
int bmp_w = ipg_src->width, bmp_h = ipg_src->height;
//FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), pImage->origin );
int width=bmp_w;
int height=bmp_h;
int bpp=ipg_src (ipg_src->depth & 255)*ipg_src->nChannels : 0;
int origin=ipg_src->origin;
HBITMAP hBitmap;
BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);
memset( bmih, 0, sizeof(*bmih));
bmih->biSize = sizeof(BITMAPINFOHEADER);
bmih->biWidth = width;
bmih->biHeight = origin abs(height) : -abs(height);
bmih->biPlanes = 1;
bmih->biBitCount = (unsigned short)bpp;
bmih->biCompression = BI_RGB;
if( bpp == 8 )
{
RGBQUAD* palette = bmi->bmiColors;
int i;
for( i = 0; i < 256; i++ )
{
palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i;
palette[i].rgbReserved = 0;
}
}
}