MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建、图像数据的获取等功能。虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以胜任的。很多人可能会采用一些现成的CDib类进行位图的读取与处理,我觉得必要性不大。因为他们完成的功能差不多。

以下假设定义了数据成员:

CBitmap m_bitmap;

(1) 位图的读取

void LoadImage(CString fileName) { HBITMAP m_hBitmap;//位图句柄 BITMAP bm;//存放位图信息的结构

m_hBitmap = (HBITMAP)::LoadImage(NULL,fileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   //装载位图    if(m_bitmap.m_hObject)       m_bitmap.DeleteObject();    m_bitmap.Attach(m_hBitmap);//将句柄与CBitmap关联起来    m_bitmap.GetBitmap(&bm);    height = bm.bmHeight;//图像的宽高    width = bm.bmWidth;

widthBytes=bm.bmWidthBytes;//图像一行数据所占的字节数

}

(2) 位图的显示

在OnDraw()或OnPaint()函数中调用:

//dx0,dy0,dx,dy为显示目标位置的坐标和大小,

//sx0,sy0,sx,sy为图像要显示部分的起始坐标和大小

void DrawImage(int dx0, int dy0, int dx, int dy, int sx0, int sy0, int sx, int sy)

{ if(!m_bitmap.m_hObject)    return;

CClientDC dc(this);

CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pbmpOld = memDC.SelectObject(&m_bitmap);

dc.SetStretchBltMode(COLORONCOLOR);//设置拉伸模式,否则图像会不清晰 dc.StretchBlt(dx0,dy0,dx,dy,&memDC,sx0,sy0,sx,sy,SRCCOPY);//绘制图像 memDC.SelectObject(pbmpOld); memDC.DeleteDC();

}

(3) 位图数据的获取

以灰度转化为例:

int size=height*widthBytes; BYTE *lpBits=new BYTE[size]; m_bitmap.GetBitmapBits(size,lpBits);//得到RGB数据

BYTE *lpGray=new BYTE[height*width];

int R, G, B;

for(int i=0;i<height;i++)

for(int j=0;j<width;j++)

{

B=lpBits[i*widthBytes+j*4];

G=lpBits[i*widthBytes+j*4+1];

R=lpBits[i*widthBytes+j*4+2];

lpGray[i*width+j]=(B+G+R)/3;//转化为灰度

}

...

delete []lpBits;

delete []lpGray;

最新文章

  1. Rafy 领域实体框架 - 公司内部培训视频
  2. 【字符编码】Java编码格式探秘
  3. 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法
  4. faster_rcnn c++版本的 caffe 封装(1)
  5. 《DSP using MATLAB》示例Example5.8
  6. Java中封装、继承和多态
  7. glade2支持C++代码的输出(1)
  8. Make it run, make it right, make it fast
  9. &#39;$.browser.msie&#39; 为空或不是对象
  10. 优化MySQL,还是使用缓存?读一篇文章有感
  11. 配置centos防火墙(iptables)开放80端口
  12. 8个web前端的精美HTML5 &amp; CSS3效果及源码下载
  13. mysql 插入汉字 异常 Incorrect string value: &#39;\xE8\xA7\x84\xE5\x88\x99&#39; for column &#39;name&#39;
  14. mac上java开发环境
  15. ubuntu下tomcat启动巨慢分析
  16. Grails默认首页的修改
  17. 为异常处理做准备,熟悉一下WinDbg工具
  18. 织梦5.7DEDECMS标签大全
  19. 关于ls命令的实例
  20. (注意输入格式)bistuoj(旧)1237 成绩统计

热门文章

  1. [转载]ASP.NET对路径&quot;xxxxx&quot;的访问被拒绝的解决方法小结
  2. 用NPOI导出Excel
  3. NData BUG 记录
  4. Nginx正确记录post日志的方法
  5. POJ 1862
  6. aChartEngine图表显示
  7. HDU 3507 Print Article(斜率优化DP)
  8. Secret and Whisper
  9. 第一个java程序(hdu 1001)
  10. 查看服务器的TCP/IP(http)连接情况