IplImage * pImg; CString strPathName; CFileDialog dlg(TRUE); CDC * pDC = this -> GetDC(); CRect rect; this -> GetClientRect( & rect); if (dlg.DoModal() == IDOK) ... { strPathName = dlg.GetPathName(); pImg = cvLoadImage(strPathName); BITMAPINFO bmi; FillBitmapInfo(&bmi,pImg->width,pImg->height,(pImg->depth)*(pImg->nChannels)); ::StretchDIBits(pDC->GetSafeHdc(),rect.left,rect.top,pImg->width,pImg->height,0,0,pImg->width,pImg->height,pImg->imageData,&bmi,DIB_RGB_COLORS,SRCCOPY); } void COpenCVDrawView::FillBitmapInfo( BITMAPINFO * bmi, int width, int height, int bpp ) ... { ASSERT( bmi && width > 0 && height > 0 && (bpp == 8 || bpp == 24 || bpp == 32) ); BITMAPINFOHEADER* bmih = &(bmi->bmiHeader); memset( bmih, 0, sizeof(*bmih)); bmih->biSize = sizeof(BITMAPINFOHEADER); bmih->biWidth = width; bmih->biHeight = -abs(height); bmih->biPlanes = 1; bmih->biBitCount = 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; } } }