MFC显示灰度图片

在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);

 

你可能感兴趣的:(MFC显示灰度图片)