CBitmap的使用

简介: <div class="bct fc05 fc11 nbw-blog ztag"><br><p style="TEXT-INDENT: 2em;">MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建、图像数据的获取等功能。虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以胜任的。很多人可能会采用一些现成的CDib类进行位图的读取与处理,我觉得

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;


相关文章
|
9月前
|
编解码 Linux C语言
探索C++与Live555实现RTSP服务器的艺术(一)
探索C++与Live555实现RTSP服务器的艺术
673 1
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型是如何理解人类语言的?
大模型是如何理解人类语言的?
131 0
|
2月前
|
存储 供应链 数据可视化
宠物公司双旦备战,何种办公软件可优化库存管理?
在冬季双旦节期间,宠物行业的业务量激增,高效的团队协作和学习效率至关重要。合适的办公软件能助力企业在需求预测、库存管理、营销策划等方面顺畅运营。本文推荐6款可视化团队协作办公软件:板栗看板、Trello、Asana、飞书、腾讯文档和石墨文档。这些软件各具特色,如板栗看板的直观数据呈现、Trello的插件拓展、Asana的强大项目管理、飞书的实时协作文档、腾讯文档的便捷模板和石墨文档的深度协作功能,帮助宠物企业提升工作效率,实现业绩增长。
51 5
|
存储 JSON 小程序
【小程序云开发】不用后端也能构建完整的微信小程序
本文介绍了如何从零开始学习和掌握微信小程序云开发,包括云函数、云数据库和HTTP触发等重要概念。通过详细的步骤和示例,读者将学会如何创建和部署云函数,以及如何使用云数据库来存储和管理小程序的数据。同时,本文还介绍了如何通过HTTP触发器实现小程序与外部API的数据交互,从而为小程序开发提供更灵活、高效的后端解决方案。无论您是初学者还是有一定经验的开发者,本文都将帮助您轻松掌握微信小程序云开发,并为您的小程序开发项目提供更多可能性。
1651 0
|
Web App开发 图形学 iOS开发
Visual Studio 2019 设置等宽字体 DejaVu Sans Mono
Visual Studio 如何设置既等宽视觉上又舒服的字体
387 0
|
Python
相关系数 r 和决定系数 R2 的那些事
有人说相关系数(correlation coefficient, r)和决定系数(coefficient of determination, R2,读作R-Squared)都是评价两个变量相关性的指标,且相关系数的平方就是决定系数?这种说法对不对呢?请听下文分解!
1636 0
|
Ubuntu 编译器 Linux
linux(arm、hi3531A)交叉编译live555最新代码
linux(arm、hi3531A)交叉编译live555最新代码
450 0
linux(arm、hi3531A)交叉编译live555最新代码
|
存储 XML 消息中间件
一文彻底搞懂序列化和反序列化
一文彻底搞懂序列化和反序列化
|
运维 关系型数据库 MySQL
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(一)
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)
246 0
|
分布式数据库 Apache Hbase
《HBase应用与发展之Apache HBase的现状和发展》电子版地址
HBase应用与发展之Apache HBase的现状和发展
130 0
《HBase应用与发展之Apache HBase的现状和发展》电子版地址

热门文章

最新文章