cbitmap 获取RGB 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;

时间: 2024-10-27 05:46:00

cbitmap 获取RGB CBitMap的用法的相关文章

vc/mfc获取rgb图像数据后动态显示及保存图片的方法

vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib  链接库 [cpp] view plaincopy //------------------------------设置位图头结构信息---------------------------------------------------------------------- // Setup bm

MFC获取rgb图像数据后动态显示及保存图片的方法

该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib  链接库 //------------------------------设置位图头结构信息---------------------------------------------------------------------- // Setup bmpinfo structure yourself m_bmpinfo=new BITMAPINFO;

[iOS]iOS获取设备信息经常用法

郝萌主倾心贡献.尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源代码传送:http://dwz.cn/Nret1 1. 经常用法 NSLog(@"HostName: %@", [[NSProces

python获取当前时间的用法

1.先导入库:from datetime import datetime 2.获取当前日期和时间:now_time = datetime.now() 3.格式化成我们想要的日期:strftime() 比如:“2016-09-21”:datetime.now().strftime('%Y-%m-%d') 4.在当前时间增加1小时:add_hour=datetime.now()+timedelta(hours=1)   #需要导入timedelta库 格式“小时”:now_hour=add_hour

如何在Processing中用鼠标获取RGB颜色数值

要做一个抠图应用,所以随手做了个鼠标取色,代码如下: 1 void mousePressed(){ 2 int imgC = get(mouseX,mouseY); 3 int R = (imgC >> 16) & 0xFF; 4 int G = (imgC >> 8) & 0xFF; 5 int B = imgC & 0xFF; 6 println("Current position color: Red = "+R+", G

Android onActivityResult获取返回值的用法

2014-03-09 00:08:15 分类: Android平台 现有MainActivity,当它进入到SecondActivity后,在SecondActivity中进行了某些操作然后需要将值返回给MainActivity时, 于是就可以用到onActivityResult() 这个方法了,下面呢,我就具体来介绍一下用法. 不过在这之前,先讲一下intent的用法: 对于intent主要的分类主要包括隐式意图和显式意图.显式意图通常主要是启动本应用中的Activity之间的数据, 而隐式意

IplImage 与 CBitmap类 的相互转换

 在VC中利用OpenCV做图像处理程序时,有时需要把IpImage 类型和CBitmap类型相互转换,这样就可以利用VC中的GDI+函数对图像进行某些特殊的显示和处理,非常方便.这里是本人项目中写的两个转换小函数,仅供参考,转载注明,这样方便发现问题的朋友联系我及时修改. IplImage转换为CBitmap类型 CBitmap *IplImage2CBitmap(const IplImage *pImage) { if( pImage && pImage->depth ==

详解php 获取文件名basename()函数的用法

PHP 中basename()函数给出一个包含有指向一个文件的全路径的字符串,此函数返回基本的文件名,本篇文章收集了关于使用PHP basename()函数获取文件名的几篇文章,希望对大家理解使用PHP basename()函数获取文件名有所帮助. 1.详解php basename()函数获取文件名的用法 php basename()函数给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉.在 Windows 中,斜线(/

javascript获取随机rgb颜色和十六进制颜色的方法

<div id="console">在线交易平台的成功秘诀:从 Ebay 到 Yelp 到 Uber</div> <script type="text/javascript"> var consoleDom = document.getElementById("console"); consoleDom.style.color = randomColor1(); //获取rgb类型的颜色 IE7不支持 func