CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
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相关推荐
- 第四次游戏革命:全息游戏 from:http://www.cnblogs.com/alamiye010/archive/2012/08/15/2640881.html...
第四次游戏革命:全息游戏 最近一个月,把国内外十数款单机/网游大作横扫一遍,感慨颇多.国内游戏,抄袭遍地,十足的坑爹,浪费青春.反观国外,韩国网游经典而耐玩,<C9>+<洛奇英雄传& ...
- http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html(重要)
http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html
- http://www.cnblogs.com/holyknight-zld/archive/2012/08/09/wcf_uploadpic.html
WCF开山篇__图片传输 一. 简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是.NE ...
- 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 ...
- 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 ...
- 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 ...
- windows phone 7 中文天气预报应用--来源http://www.cnblogs.com/liulunet/archive/2011/08/17/2141696.html...
windows phone 7 中文天气预报应用 wp7的应用还是太少了,中文应用更少.虽然有天气预报应用但是自己感觉并不好用,感觉这样的程序应该很简单,于是萌生了自己写一个的想法. 印证了群里朋友说 ...
- github上的优秀项目和开发环境配置【转http://www.cnblogs.com/2018/archive/2012/11/09/2763119.html】...
github上的优秀项目和开发环境配置 国外的几个公司开放的资源 https://github.com/google https://github.com/facebook https://git ...
- Android实现XML解析技术 (转载http://www.cnblogs.com/hanyonglu/archive/2012/02/28/2370675.html)...
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
最新文章
- 【算法】弗洛伊德(Floyd)算法
- 韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?
- manjaro 火焰截图添加快捷键_Linux中功能强大的截图工具 - Flameshot
- JSONP跨域的原理解析及其实现介绍
- ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302
- PowerDesigner概念模型详解
- java 实现一段文字中,出现次数最多的字
- 电商app中的商品列表UX框架要如何设计?
- MyBatis拦截器原理探究MyBatis拦截器原理探究 1
- for(;;)和while(true)的区别
- 新手上路学习配置C,C++,GTK等开发环境
- 国科大学习资料--矩阵分析与应用(李保滨)--2017年期末考试试卷
- 计算机学院少女节条幅,女生节条幅大战又打响了!哪个高校条幅标语最撩人 网友酸了...
- 西门子mag6000接线_西门子(SIEMENS)妙声力系列电磁流量计变送器MAGFLO MAG5000 MAG6000中文使用手册.pdf...
- Android 点击按钮出现弹窗
- 安卓升级AndroidX手把手教程
- 计算机选购知识,计算机知识讲座(9):硬盘的选购
- 蓝色理想:讲解网络端口及其详解的一个好网址
- 网页显示不正常怎么修复
- 2021十大黄金理财app平台排行榜
热门文章
- 【爬蟲】使用 httpclient进行POST请求
- AngularJS路由使用案例
- qlikview连接mysql_QlikView通过ODBC连接IBMDB2
- 通过Idea创建spring项目,没有spring Initializr选项的解决方法
- 支付宝商户代扣2.0文档
- 为啥八位的计算机可以用补码表示-128
- java逆数组如何print_Java 逆数组
- python符号运算_用Python做科学计算-SymPy符号运算
- 3台机器配置hadoop集群_Hadoop学习之路(三)Hadoop集群搭建和简单应用
- Linux C: IO库函数,文件流缓冲,变参函数