调用SetDIBits修改位图内容 from http://blog.csdn.net/iamshuke/article/details/5749933

通过调用SetDIBits直接修改位图数据。下面的示例在黑色背景上画了一个十字。

 

[cpp]  view plain copy
  1. void CTest5Dlg::OnOK()   
  2. {  
  3.     // TODO: Add extra validation here  
  4.     CClientDC dc(this);  
  5.     CDC memDC;  
  6.     memDC.CreateCompatibleDC(&dc);  
  7.   
  8.     CBitmap bmp;  
  9.     bmp.CreateCompatibleBitmap(&dc, 300, 200);  
  10.     memDC.SelectObject(&bmp);  
  11.   
  12.     BITMAPINFO bmpInfo;  
  13.     bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  
  14.     bmpInfo.bmiHeader.biWidth = 300;  
  15.     bmpInfo.bmiHeader.biHeight = -200;  
  16.     bmpInfo.bmiHeader.biPlanes = 1;  
  17.     bmpInfo.bmiHeader.biBitCount = 24;  
  18.     bmpInfo.bmiHeader.biCompression = BI_RGB;  
  19.     bmpInfo.bmiHeader.biSizeImage = 0;  
  20.     bmpInfo.bmiHeader.biXPelsPerMeter = 3000;  
  21.     bmpInfo.bmiHeader.biYPelsPerMeter = 3000;  
  22.     bmpInfo.bmiHeader.biClrUsed = 0;  
  23.     bmpInfo.bmiHeader.biClrImportant = 0;  
  24.       
  25.     long nLnBytes = (bmpInfo.bmiHeader.biWidth*3+3)/4*4;  
  26.     BYTE *pData = new BYTE[nLnBytes*abs(bmpInfo.bmiHeader.biHeight)];  
  27.       
  28.     //清成黑色  
  29.     memset(pData,0,nLnBytes*abs(bmpInfo.bmiHeader.biHeight));  
  30.   
  31.     //画一个十字  
  32.     for(int i=10; i<90; i++)  
  33.     {  
  34.         //横线, 黄色  
  35.         pData[50*nLnBytes+i*3+1] = 255; //g  
  36.         pData[50*nLnBytes+i*3+2] = 255; //r  
  37.   
  38.         //竖线, 蓝色  
  39.         pData[i*nLnBytes+50*3] = 255; //b  
  40.     }  
  41.   
  42.     SetDIBits(dc.m_hDC, bmp, 0, abs(bmpInfo.bmiHeader.biHeight), pData, &bmpInfo, DIB_RGB_COLORS);  
  43.   
  44.     delete []pData;  
  45.   
  46.     dc.BitBlt(0, 0, bmpInfo.bmiHeader.biWidth, abs(bmpInfo.bmiHeader.biHeight), &memDC, 0, 0, SRCCOPY);  
  47. }  

 

 效果图:

转载于:https://www.cnblogs.com/songtzu/archive/2012/12/21/2828293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值