位图显示

1,位图

 对于24位以上的和以下的位图头的构造不同:

   >24:总长= sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) + Width*Height*4;
  BITMAPFILEHEADER* hdr = (BITMAPFILEHEADER*)m_pBuf;
  BITMAPINFOHEADER *lpbmi = (BITMAPINFOHEADER *)(m_pBuf + sizeof(BITMAPFILEHEADER));
  hdr->bfType = (WORD)'MB';//0x4D42;
  hdr->bfSize = (DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+m_nPicHeight*m_nPicWidth*4); 
  hdr->bfOffBits = (DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));
  lpbmi->biBitCount = 32;//每个像素字节大小  lpbmi->biCompression = BI_RGB;  lpbmi->biHeight = m_nPicHeight;//高度  lpbmi->biPlanes = 1;  lpbmi->biSize = sizeof(BITMAPINFOHEADER);
  lpbmi->biSizeImage = 0  lpbmi->biWidth = m_nPicWidth;//宽度
<24:就有颜色信息长度在里面,头的长度有BITMAPINFO而不是BITMAPINFOHEADER

 

2,位图显示在对话框中

 HDC hmemdcBK  = ::CreateCompatibleDC(hdc);  //创建内存DC
 HGDIOBJ hOldBK;
 hOldBK = ::SelectObject(hmemdcBK,m_hBmpFigBg);   //把位图选进内存DC
 ::BitBlt(hdc, rcWin.left, rcWin.top, rcWin.Width(), rcWin.Height(), hmemdcBK, 0, 0, SRCCOPY);//显示
 ::SelectObject(hmemdcBK, hOldBK);      //还原老的位图
 ::DeleteDC(hmemdcBK);            //释放DC

 //如果要缩放的话 之前要先把m_hBmpFigBg缩放.

  HDC hDc = GetDC()->m_hDC;
 HDC hMemDCOri = ::CreateCompatibleDC(hDc);
 HDC hMemDCNew = ::CreateCompatibleDC(hDc);
 HGDIOBJ hOld1 = ::SelectObject(hMemDCOri,m_hBmpBg);
 m_hBmpFigBg = ::CreateCompatibleBitmap(hDc,m_nDlgWidth,m_nDlgHeight);
 HGDIOBJ hOld2 = ::SelectObject(hMemDCNew,m_hBmpFigBg);//把位图选进内存DC
 BITMAP bm;
 ::GetObject(m_hBmpBg,sizeof(bm),&bm);
 int nMode = SetStretchBltMode (hMemDCNew, HALFTONE);
 ::StretchBlt(hMemDCNew,0,0,Width,Height,hMemDCOri,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

//改变了新的内存DC,也就是改变了位图的大小.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值