在MFC中将一幅灰度图片的数据,显示到界面中.
1. 定义绘制变量,图片绘制到内存时所用
CDC m_dcBG;
CBitmap m_bmBG;
CBitmap *m_pOldBmBG;
2. 初始化绘制内存,我是在控件的OnSize中根据控件大小变化重新初始化;
if (m_dcBG.GetSafeHdc() != NULL)
m_dcBG.DeleteDC();
if( m_bmBG.GetSafeHandle() != NULL )
m_bmBG.DeleteObject();
m_dcBG.CreateCompatibleDC(&dc) ;
m_bmBG.CreateCompatibleBitmap(&dc, m_rtCtrl.Width(), m_rtCtrl.Height());
m_pOldBmBG = m_dcBG.SelectObject(&m_bmBG);
3. 设定BMP图片信息
// Set BMP info
m_pBmInfo = (BITMAPINFO *) new BYTE[sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD)];
m_pBmInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_pBmInfo->bmiHeader.biWidth = 1280;
m_pBmInfo->bmiHeader.biHeight = -1024;
m_pBmInfo->bmiHeader.biPlanes = 1;
m_pBmInfo->bmiHeader.biBitCount = 8;
m_pBmInfo->bmiHeader.biCompression = BI_RGB;
m_pBmInfo->bmiHeader.biSizeImage = 0;
m_pBmInfo->bmiHeader.biXPelsPerMeter = 0
m_pBmInfo->bmiHeader.biYPelsPerMeter = 0
m_pBmInfo->bmiHeader.biClrUsed = 0;
m_pBmInfo->bmiHeader.biClrImportant = 0;
// Set Palette
for(int i=0;i<256;i++)
{
m_pBmInfo->bmiColors[i].rgbRed = (BYTE)i;
m_pBmInfo->bmiColors[i].rgbGreen = (BYTE)i;
m_pBmInfo->bmiColors[i].rgbBlue = (BYTE)i;
m_pBmInfo->bmiColors[i].rgbReserved = (BYTE)0;
}
4. 图片绘制到内存
::SetStretchBltMode(m_dcBG.GetSafeHdc(), COLORONCOLOR);
StretchDIBits( m_dcBG,0,0,640,480,
0,0,640,480,
(LPBYTE )m_pGray,m_pBmInfo,DIB_RGB_COLORS,SRCCOPY//SRCPAINT
);
640×480的灰度图像数据绘制成640×480的大小,可以根据实际调整;m_pGray灰度图像数据指针;m_pBmInfo前面定义的BMP信息。
5. OnPaint中绘制到控件显示
dc.BitBlt(0, 0, 640,480,&m_dcBG, 0, 0, SRCCOPY);