vc/mfc获取rgb图像数据后动态显示及保存图片的方法
vc/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;
- }
vc/mfc获取rgb图像数据后动态显示及保存图片的方法的更多相关文章
- MFC获取rgb图像数据后动态显示及保存图片的方法
该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib 链接库 //---------------- ...
- [转]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 ...
- VC++ MFC获取对话框上控件的位置
CRect rect; GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件的屏幕坐标 ScreenToClient(&rect);//转换 ...
- sql server删除数据后空间无变化处理方法
删除数据库表 第一步: 执行 delete from doc.115sou.com #删除数据,执行效率低 drop table doc.115sou.com #删除表 ...
随机推荐
- Matlab中unifrnd函数使用解析
1.生成N阶[a,b]均匀分布数组 >> unifrnd(3,5,5,5) ans = 3.8651 4.6677 4.8115 4.3456 4.8560 4.0241 3.4079 3 ...
- [转载]Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决
今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误: HTTP Error 500.21 - Internal Server Error Handler " ...
- check environment var
田+R cmd set XXX check environment var
- Winform 窗体的操作
原文:http://www.cnblogs.com/Billy-rao/archive/2012/05/16/2503437.html 怎样能使winform窗体的大小固定住,不能调整其大小 窗体Fo ...
- 三分初练QAQ
求凸函数的极值的一般方法是三分 三分的思想大概是这样的: 例如我们要求下凸函数的极值 在区间[L,R]上, 我们定义m1为区间的第一个三等分点 定义m2为区间的第二个三等分点 设函数值为F(x) 则若 ...
- java使用Apache POI操作excel文件
官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...
- lintcode :Ugly Numbers 丑数
题目 丑数 设计一个算法,找出只含素因子3,5,7 的第 k 大的数. 符合条件的数如:3,5,7,9,15...... 样例 如果k=4, 返回 9 挑战 要求时间复杂度为O(nlogn)或者O(n ...
- POJ1986 DistanceQueries 最近公共祖先LCA 离线算法Tarjan
这道题与之前那两道模板题不同的是,路径有了权值,而且边是双向的,root已经给出来了,就是1,(这个地方如果还按之前那样来计算入度是会出错的.数据里会出现多个root...数据地址可以在poj的dis ...
- iOS LLDB调试器
随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器.它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.LLDB为Xcode提供了底层调试环 ...
- Spring与Hibernate整合
Spring与Struts2整合的目的: 让Spring管理Action Spring整合Hinernate的目的: --管理SessionFactory(单例的),数据源 --声明式事务管理 1.首 ...