CBitMap的用法

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;

转载于:https://www.cnblogs.com/songtzu/archive/2013/01/03/2842580.html

CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html相关推荐

  1. 第四次游戏革命:全息游戏 from:http://www.cnblogs.com/alamiye010/archive/2012/08/15/2640881.html...

    第四次游戏革命:全息游戏 最近一个月,把国内外十数款单机/网游大作横扫一遍,感慨颇多.国内游戏,抄袭遍地,十足的坑爹,浪费青春.反观国外,韩国网游经典而耐玩,<C9>+<洛奇英雄传& ...

  2. http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html(重要)

    http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html

  3. http://www.cnblogs.com/holyknight-zld/archive/2012/08/09/wcf_uploadpic.html

    WCF开山篇__图片传输 一.  简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是.NE ...

  4. mysql基本操作 [http://www.cnblogs.com/ggjucheng/archive/2012/11/03/2752082.html]

    创建表 简单的方式 CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE ); 或者是 CREATE TABLE ...

  5. http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html

    转载:http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html 作者:petercao equals 方法是 java.lang ...

  6. java中的多线程(转自http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html)

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: 1 2 3 4 5 6 7 8 9 10 11 ...

  7. windows phone 7 中文天气预报应用--来源http://www.cnblogs.com/liulunet/archive/2011/08/17/2141696.html...

    windows phone 7 中文天气预报应用 wp7的应用还是太少了,中文应用更少.虽然有天气预报应用但是自己感觉并不好用,感觉这样的程序应该很简单,于是萌生了自己写一个的想法. 印证了群里朋友说 ...

  8. github上的优秀项目和开发环境配置【转http://www.cnblogs.com/2018/archive/2012/11/09/2763119.html】...

    github上的优秀项目和开发环境配置 国外的几个公司开放的资源  https://github.com/google https://github.com/facebook  https://git ...

  9. Android实现XML解析技术 (转载http://www.cnblogs.com/hanyonglu/archive/2012/02/28/2370675.html)...

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

最新文章

  1. 【算法】弗洛伊德(Floyd)算法
  2. 韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?
  3. manjaro 火焰截图添加快捷键_Linux中功能强大的截图工具 - Flameshot
  4. JSONP跨域的原理解析及其实现介绍
  5. ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302
  6. PowerDesigner概念模型详解
  7. java 实现一段文字中,出现次数最多的字
  8. 电商app中的商品列表UX框架要如何设计?
  9. MyBatis拦截器原理探究MyBatis拦截器原理探究 1
  10. for(;;)和while(true)的区别
  11. 新手上路学习配置C,C++,GTK等开发环境
  12. 国科大学习资料--矩阵分析与应用(李保滨)--2017年期末考试试卷
  13. 计算机学院少女节条幅,女生节条幅大战又打响了!哪个高校条幅标语最撩人 网友酸了...
  14. 西门子mag6000接线_西门子(SIEMENS)妙声力系列电磁流量计变送器MAGFLO MAG5000 MAG6000中文使用手册.pdf...
  15. Android 点击按钮出现弹窗
  16. 安卓升级AndroidX手把手教程
  17. 计算机选购知识,计算机知识讲座(9):硬盘的选购
  18. 蓝色理想:讲解网络端口及其详解的一个好网址
  19. 网页显示不正常怎么修复
  20. 2021十大黄金理财app平台排行榜

热门文章

  1. 【爬蟲】使用 httpclient进行POST请求
  2. AngularJS路由使用案例
  3. qlikview连接mysql_QlikView通过ODBC连接IBMDB2
  4. 通过Idea创建spring项目,没有spring Initializr选项的解决方法
  5. 支付宝商户代扣2.0文档
  6. 为啥八位的计算机可以用补码表示-128
  7. java逆数组如何print_Java 逆数组
  8. python符号运算_用Python做科学计算-SymPy符号运算
  9. 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
  10. Linux C: IO库函数,文件流缓冲,变参函数