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;
cbitmap 获取RGB的更多相关文章
- cbitmap 获取RGB CBitMap的用法
MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建.图像数据的获取等功能.虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以胜任的.很多人可能会采用一 ...
- 获取UIColor中的RGB值(本人亲测多个获取RGB值的方法,这个最有效)
在自己研发的项目个人项目中,碰到一个从颜色中获取RGB值的需求. 在网上找了许久,也有一些方法可以获取RGB值,但不能获取黑白以及灰色的值(他们是非RGB颜色空间,不清楚什么意思,反正亲测确实获取不了 ...
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw3 ...
- Kinect v2 + WPF获取RGB与Depth图像
date: 2017-09-04 14:51:07 Kinect V2的Depth传感器采用的是「Time of Flight(TOF)」的方式, 通过从投射的红外线反射后返回的时间来取得Depth信 ...
- MFC获取rgb图像数据后动态显示及保存图片的方法
该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib 链接库 //---------------- ...
- 一个简单的获取RGB值方式
操作系统内置了许多小工具,有时候这些小工具也挺有用的,省去了安装一些复杂的软件, 截图 通过键盘PrtSc获取到要取色的图片,然后用画图工具打开 查看 通过画图工具的取色工具,取到你需要的颜色,然后点 ...
- 如何在Processing中用鼠标获取RGB颜色数值
要做一个抠图应用,所以随手做了个鼠标取色,代码如下: void mousePressed(){ int imgC = get(mouseX,mouseY); int R = (imgC >> ...
- javascript获取随机rgb颜色和十六进制颜色的方法
<div id="console">在线交易平台的成功秘诀:从 Ebay 到 Yelp 到 Uber</div> <script type=" ...
- c#怎样获取excel单元格的RGB颜色
这段时间一直在做office的工作.前2天获取单元格的颜色的问题一直没搞明确. 開始我想用的就是Npoi.主要前一部分的工作都是用Npoi完毕的 row.GetCell(j).CellStyle.Fi ...
随机推荐
- Spring-boot01
本文记录Spring-Boot学习途中的点点滴滴. 其实Spring-Boot出来好长时间了,但是一直没去关注过.之前在我的印象里Spring-Boot好就好在减去了很多XML配置,加入了很多自动配置 ...
- 分布式事务专题笔记(二)分布式事务解决方案之 2PC(两阶段提交)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 前面已经了解了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC.TCC ...
- Java 第十一届 蓝桥杯 省模拟赛 反倍数
反倍数 题目 问题描述 给定三个整数 a, b, c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数. 请问在 1 至 n 中有多少个反倍数. 输入格式 ...
- Java实现 LeetCode 450 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变.返回二叉搜索树(有可能被更新)的根节点的引 ...
- Python爬虫 requests库基础
requests库简介 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支 ...
- 我的Dos笔记
DOS笔记:DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”[drive:][path][filename] 指定要列出的驱动器.目录和/或文件. /A ...
- [C#.NET 拾遗补漏]04:你必须知道的反射
阅读本文大概需要 3 分钟. 通常,反射用于动态获取对象的类型.属性和方法等信息.今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的. 获取类型的成员 Type 类的 GetMe ...
- HttpUtil工具类,发送Get/Post请求,支持Http和Https协议
HttpUtil工具类,发送Get/Post请求,支持Http和Https协议 使用用Httpclient封装的HttpUtil工具类,发送Get/Post请求 1. maven引入httpclien ...
- Vue-websocket使用
Vue中使用websocket 1.介绍:websocket是一个双向通行工具,解决了原来的http单向通信的弊端,可以让服务器主动向客户端推送数据 // 安装客户端的socket npm i soc ...
- Spring之多数据源切换的应用
这不是一个新的知识点扩展,顶多算是,Spring的AOP特性的一个应用.那么下面开始今天的学习之旅! 场景 数据库读写分离,或者分库,总之多数据源的场景,怎么样实现自动切换(PS:不考虑各种分库分表的 ...