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;

CBitmap的使用的更多相关文章

  1. CBitmap、HBITMAP、BITMAP相互转换

    一:理解 BITMAP是C++中定义的位图结构体 HBITMAP是Windows中使用的位图句柄 CBitmap是MFC封装的位图类 二:相互转换 1.HBITMAP->CBitmap 方法一: ...

  2. VC++ GDI 总结 一一 CBitmap类

    class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHand ...

  3. Halcon 10.0:Hobject图像转CBitmap

    void HImage2CBitmap(Hobject pImage,CBitmap *wImage) { char lpcsType[MAX_STRING]; Hlong lPointer,widt ...

  4. cbitmap 获取RGB CBitMap的用法

    MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建.图像数据的获取等功能.虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以胜任的.很多人可能会采用一 ...

  5. IPicture、BITMAP、HBITMAP和CBitmap的关系

    1.有关IPicture加载图片后直接Render到内存DC的问题(HBITMAP转换IPicture)Picture的方法get_Handle可以直接得到图片的句柄 IPicture *pIPict ...

  6. Bitmap、CBitmap、HBITMAP以及BITMAP的相互转换

    Bitmap.CBitmap.HBITMAP以及BITMAP的相互转换 构建CBitmapCBitmap bmp;bmp.LoadBitmap(ID); 构建HBITMAPHBitmap = (HBI ...

  7. [ATL/WTL]_[0基础]_[CBitmap复制图片-截取图片-平铺图片]

    场景: 1.当你须要截取图片部分区域作为某个控件的背景. 2.须要平铺图片到一个大区域让他自己主动放大时. 3.或者须要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateC ...

  8. CBitmap,HBitmap,Bitmap区别及联系

    加载一位图,可以使用LoadImage: HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int ...

  9. 根据图像路径,创建CBitmap对象的方法

    因为项目的关系,需要根据图像路径,创建CBitmap对象.起初查资料找到了LoadBitmap这个函数,根据CSDN得 BOOL LoadBitmap ( LPCTSTR lpszResourceNa ...

随机推荐

  1. Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)

    发客户端一定要做的就是自动更新模块,否则每次版本升级都是一个头疼的事.下面是Electron应用使用electron-builder配合electron-updater实现自动更新的解决方案. 1.安 ...

  2. crontab 定时任务守护程序,停止服务器时出现 job for * canceled

    (1)首先要在程序启动的时候加入定时任务到crontab #! /bin/shmkdir -p /home/apps/components/ams/ 2>/dev/nullcp ./amswat ...

  3. python 集合操作方法详解

    说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球 的人都有哪些? play_basketball = ['a','b','c','d','e'] pl ...

  4. 数据库MySQL的基本操作

    1.MySQL数据库的安装: CentOS6上mysql服务端和客户端的安装和启动: #使用yum安装mysql数据库的服务端和客户端 yum install -y mysql mysql-serve ...

  5. iOS-PYSearch 完美搜索页

    APP搜索页基本上是少不了的,热门搜索.搜索记录等:这里推荐一个大牛ko1o写的:PYSearch,他还有一个不错的图片浏览开源:PYPhotoBrowser:这个也不错,感兴趣的可以了解下:下面说下 ...

  6. instanceof、isInstance、isAssignableFrom的区别

    https://stackoverflow.com/questions/3949260/java-class-isinstance-vs-class-isassignablefrom 1. MyCla ...

  7. CheckStyle

    在Eclipse当中安装CheckStyle插件非常方便,和安装FindBugs除了URL有区别之外,其他的几乎完全一样.我们可以参照以下几个步骤进行(注意一下,eclipse版本不一样,可能安装插件 ...

  8. 51NOD 1376 最长递增子序列的数量 [CDQ分治]

    1376 最长递增子序列的数量 首先可以用线段树优化$DP$做,转移时取$0...a[i]$的最大$f$值 但我要练习$CDQ$ $LIS$是二维偏序问题,偏序关系是$i<j,\ a_i< ...

  9. ES6字符串

    1.unicode表示法: alert("\u0061"); alert("\uD842\uDFB7"); alert("\u20BB7") ...

  10. C#实现航班查询及预订

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...