OnDraw中的一段代码:
int w,h ;
w = pDoc->pImage->Width() ;
h = pDoc->pImage->Height() ;
CDC dcMem;
CBitmap bmp;
dcMem.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height()) ;
dcMem.SelectObject(&bmp);
dcMem.FillSolidRect(rect,pDC->GetBkColor());
POINT pt ;
pt.x = 100 ;
pt.y = 100 ;
StretchDIBits(dcMem.m_hDC,10,30,w,h,0,h,w,-h,pDoc->pImage->m_pBits,pDoc->pImage->lpbmi,DIB_RGB_COLORS,SRCCOPY) ;
int rt = pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
dcMem.DeleteDC();
//删除DC
bmp.DeleteObject() ;
说明:
pDoc->pImage 是我用OpenCV已经读取的图像IplImage封装成了类
m_pBit是其图像数据指针
为什么会把所有图像都显示成黑白的
int w,h ;
w = pDoc->pImage->Width() ;
h = pDoc->pImage->Height() ;
CDC dcMem;
CBitmap bmp;
dcMem.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height()) ;
dcMem.SelectObject(&bmp);
dcMem.FillSolidRect(rect,pDC->GetBkColor());
POINT pt ;
pt.x = 100 ;
pt.y = 100 ;
StretchDIBits(dcMem.m_hDC,10,30,w,h,0,h,w,-h,pDoc->pImage->m_pBits,pDoc->pImage->lpbmi,DIB_RGB_COLORS,SRCCOPY) ;
int rt = pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
dcMem.DeleteDC();
//删除DC
bmp.DeleteObject() ;
说明:
pDoc->pImage 是我用OpenCV已经读取的图像IplImage封装成了类
m_pBit是其图像数据指针
为什么会把所有图像都显示成黑白的
StretchDIBits(dcMem.m_hDC,10,30,w,h,0,h,w,-h,pDoc->pImage->m_pBits,pDoc->pImage->lpbmi,DIB_RGB_COLORS,SRCCOPY) ;
//应该是DIB_RGB_COLORS参数在起作用,你可以调整一下换成其他的参数
rect 使用GetClientRect 获得的
如果我直接用StretchDIBits(pDC->m_hDC,10,30,w,h,0,h,w,-h,pDoc->pImage->m_pBits,pDoc->pImage->lpbmi,DIB_RGB_COLORS,SRCCOPY) ; 是没有问题的,只是对于大图片会出项闪烁。我在网上搜索知道用双缓冲能避免闪烁 但是网上给的例子都只是用 dcMem 绘线矩形 没有绘图像的。 我只是想找一个快速显示图像的方法 肯请各位高手不吝赐教 !
pBitmap->LoadBitmap(IDB_TITLE_BMP);
pOldBitmap=(CBitmap *)pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetObject(sizeof(bm),&bm);
pBitmap->LoadBitmap(IDB_SET1_BMP);
pDisplayMemDC->SelectObject(pBitmap);
pBitmap->GetObject(sizeof(bm),&bm);
pDC->StretchBlt(m_rect_wnd.right-100,
m_rect_wnd.top+20,
bm.bmWidth,
bm.bmHeight,
pDisplayMemDC,
0,
0,
bm.bmWidth,
bm.bmHeight,
SRCCOPY);
pBitmap->DeleteObject();
http://blog.csdn.net/zhenxiaohui/archive/2009/07/31/4396237.aspx
在着了看到的