MFC获取rgb图像数据后动态显示及保存图片的方法
该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像
第一种方法
#include<vfw.h>
加载 vfw32.lib 链接库
- //------------------------------设置位图头结构信息----------------------------------------------------------------------
- // Setup bmpinfo structure yourself
- m_bmpinfo=new BITMAPINFO; // PBITMAPINFO *m_bmpinfo;
- // m_bmpinfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
- m_bmpinfo->bmiHeader.biSize=sizeof(BITMAPINFO);
- m_bmpinfo->bmiHeader.biWidth=IMG_WIDTH;
- m_bmpinfo->bmiHeader.biHeight=IMG_HEIGHT;
- m_bmpinfo->bmiHeader.biPlanes=1;
- m_bmpinfo->bmiHeader.biBitCount=24;
- m_bmpinfo->bmiHeader.biCompression=0;
- m_bmpinfo->bmiHeader.biSizeImage=0;
- m_bmpinfo->bmiHeader.biXPelsPerMeter=0;
- m_bmpinfo->bmiHeader.biYPelsPerMeter=0;
- m_bmpinfo->bmiHeader.biClrUsed=0;
- m_bmpinfo->bmiHeader.biClrImportant=0;
- //-------------在内存中绘制位图头信息-----------------------------------------------------------------------------------
- // Initialize DIB for drawing...
- hdib=::DrawDibOpen(); // HDRAWDIB hdib;
- if(hdib!=NULL)
- {
- ::DrawDibBegin(hdib,
- m_hdc,
- -1, // don't stretch
- -1, // don't stretch
- &m_bmpinfo->bmiHeader,
- IMG_WIDTH, // width of image
- IMG_HEIGHT, // height of image
- 0
- );
- }
- //---------------绘制位图数据 buf--------------char* buf--------------------------------------------------------------------
- ::DrawDibDraw(hdib,
- m_hdc,
- local_wnd_x, // dest : left pos
- local_wnd_y, // dest : top pos
- -1, // -1 don't zoom x
- -1, // -1 don't zoom y
- &m_bmpinfo->bmiHeader, // bmp header info
- buf, // bmp data
- 0, // src :left
- 0, // src :top
- IMG_WIDTH, // src : width
- IMG_HEIGHT, // src : height
- DDF_SAME_DRAW // use prev params....
- );
- //------------------------------结束绘制---------------------------------------------------------------------
- // Close graphics....
- if(hdib!=NULL)
- {
- ::DrawDibEnd(hdib);
- ::DrawDibClose(hdib);
- }
//***********************************************
第二种方法
- BITMAPINFO *m_bmphdr;
- DWORD dwBmpHdr = sizeof(BITMAPINFO);
- m_bmphdr = new BITMAPINFO[dwBmpHdr];
- m_bmphdr->bmiHeader.biBitCount = 24;
- m_bmphdr->bmiHeader.biClrImportant = 0;
- m_bmphdr->bmiHeader.biSize = dwBmpHdr;
- m_bmphdr->bmiHeader.biSizeImage = 0;
- m_bmphdr->bmiHeader.biWidth = IMG_WIDTH;
- m_bmphdr->bmiHeader.biHeight = IMG_HEIGHT;
- m_bmphdr->bmiHeader.biXPelsPerMeter = 0;
- m_bmphdr->bmiHeader.biYPelsPerMeter = 0;
- m_bmphdr->bmiHeader.biClrUsed = 0;
- m_bmphdr->bmiHeader.biPlanes = 1;
- m_bmphdr->bmiHeader.biCompression = BI_RGB;
- int nResult = ::StretchDIBits(m_hdc,
- local_wnd_x,
- local_wnd_y,
- IMG_WIDTH,//rc.right - rc.left,
- IMG_HEIGHT,//rc.top,
- 0, 0,
- IMG_WIDTH, IMG_HEIGHT,
- buf,
- m_bmphdr,
- DIB_RGB_COLORS,
- SRCCOPY);
保存成bmp图片文件
- // 创建位图文件
- BOOL SaveBitmap(BYTE *pBuffer, long lBufferLen)
- {
- HANDLE hf = CreateFile(m_szFileName, GENERIC_WRITE,
- FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);
- if (hf == INVALID_HANDLE_VALUE) return 0;
- // 写文件头
- BITMAPFILEHEADER fileheader;
- ZeroMemory(&fileheader, sizeof(BITMAPFILEHEADER));
- fileheader.bfType = 'MB';
- fileheader.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+lBufferLen;
- fileheader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
- DWORD dwWritter = 0;
- WriteFile(hf, &fileheader, sizeof(BITMAPFILEHEADER), &dwWritter, NULL);
- // 写文图格式
- BITMAPINFOHEADER infoHeader;
- ZeroMemory(&infoHeader, sizeof(BITMAPINFOHEADER));
- infoHeader.biSize = sizeof(BITMAPINFOHEADER);
- infoHeader.biSizeImage = lBufferLen;
- infoHeader.biWidth = lWidth;
- infoHeader.biHeight = lHeight;
- infoHeader.biBitCount = 24;
- WriteFile(hf, &infoHeader, sizeof(BITMAPINFOHEADER), &dwWritter, NULL);
- // 写位图数据
- WriteFile(hf, pBuffer, lBufferLen, &dwWritter, NULL);
- CloseHandle(hf);
- MessageBox(NULL, _T("Save bmp file succeed!"), _T("warn"), MB_OK|MB_ICONINFORMATION);
- return 0;
- }
MFC获取rgb图像数据后动态显示及保存图片的方法的更多相关文章
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw3 ...
- [转]MFC子线程更改图像数据后更新主窗口图像显示方法
程序思路是由外部的输入输出控制卡发出采集图像信号,之后相机采集图像得到图像数据指针,接收图像数据指针创建成图像最后显示到MFC对话框应用程序的Picture Control控件上,同时,为了标定相机位 ...
- RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB
jackyhwei 发布于 2010-01-01 12:02 点击:3218次 来自:CSDN.NET 一些非常有用的图像格式转换及使用的源代码,包括RGB图像数据字符叠加,图像压缩(ijl库),Y ...
- ajax获取动态列表数据后的分页问题
ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...
- RDS for MySQL 删除数据后空间没有减少处理方法
公司的程序和数据库部署在阿里云上,数据库使用的是阿里云的RDS,这天,经理在开发群中发了一个信息: 您的RDS实例rm********0oq的磁盘在过去一周平均使用率已超过80.%,建议您对实例规格进 ...
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
前言 上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤. 受限制 因为直接配置sample的vi比较麻烦 ...
- Oracle导入数据后中文乱码的解决方法
解决方法: 方法一. 1.在运行命令行输入regedit,打开注册表编辑器 2.找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1 3.看N ...
- sql server删除数据后空间无变化处理方法
删除数据库表 第一步: 执行 delete from doc.115sou.com #删除数据,执行效率低 drop table doc.115sou.com #删除表 ...
- 在navcat中清空数据后,设置id归零方法
写后台完成后,需要清空Mysql数据库中的测试数据,但是后面新增的数据,一直是以原来所删除数据的最大id为增量基本,比如,对于一些id敏感的项,十分不便,如图 原有10条数据,清空后,新增一两条,手动 ...
随机推荐
- QT中QWidget类简介
一.详细描述 QWidget类是所有用户界面对象的基类.通俗的来讲,Qt基本上所有的UI类都是由QWidget继承出来的,而QWidget继承于QObject, 大家可以查阅Qt source 即可 ...
- C# 中根据datetime的值来计算属于本年的第几周,类似delphi中的weekoftheyear功能
/// <summary> /// 获得今天是今年的第几周 /// </summary> /// <param name="year">< ...
- 浙江大学2015年校赛B题 ZOJ 3861 Valid Pattern Lock
这道题目是队友写的,貌似是用暴力枚举出来. 题意:给出一组数,要求这组数在解锁的界面可能的滑动序列. 思路:按照是否能够直接到达建图,如1可以直接到2,但是1不能直接到3,因为中间必须经过一个2. 要 ...
- 处理IIS报“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面”
“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面” 详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 C ...
- HDU1316(求区间斐波那契数的个数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1316 题意:给两个数a和b,其中它们可能很大,最大到10^100,然后求去区间[a,b]内有多少个fib数 ...
- ios创建画笔的样例(双笔画效果)
定义一个UIView:主要是在这个View里面加一个UIImageView,绘图都在这个UIImageView里面进行 @property(nonatomic) CGPoint prePoint; / ...
- Lucene核心--构建Lucene搜索(下篇,理论篇)
2.1.6 截取索引(Indextruncate) 一些应用程序的所以文档的大小先前是不知道的.作为控制RAM和磁盘存储空间的使用数量的安全机制,你可能想要限制每个字段允许输入索引的输入数量.一个大的 ...
- stm32之CAN总线基础
can总线协议概述: CAN是Controller Area Network的缩写,由德国博世公司开发:CAN通过ISO11891以及ISO11519进行了标准化: CAN总线的特点: 1.多 ...
- c# winform 弹出确认消息框判断是否删除?
if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult ...
- ant—学习记录一
<?xml version="1.0"?> <project name="helloWorld"> <target name=&q ...