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

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值