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条数据,清空后,新增一两条,手动 ...
随机推荐
- php - 微信 - 缓存access_token类。
可扩展性很强. <?php namespace LaneWeChat\Core; /** * 微信Access_Token的获取与过期检查 * Created by Lane. * User: ...
- Tomcat免安装版的环境变量配置以及Eclipse下的Tomcat配置和测试
Tomcat是目前比较流行的开源且免费的Web应用服务器,在我的电脑上第一次安装Tomcat,再经过网上教程和自己的摸索后,将这个过程 重新记录下来,以便以后如果忘记了可以随时查看. 注意:首先要明确 ...
- win8.1镜像制作
使用自带的powerShell工具,以管理员身份运行,比如镜像的目标位置为F盘,那么用下面的命令即可, wbAdmin start backup -backupTarget:F: -include:C ...
- 【转】Shell编程
原文链接: Shell编程 打算有时间简单了解shell编程 1.shell结构 一个简单的例子: [root@localhost shell]# vi example #!/bin/sh #Thi ...
- Impossible WPF Part 1: Binding Properties
原文 http://www.11011.net/wpf-binding-properties Ever wanted to write the following? <RichTextBoxDo ...
- 项目中用到的Java注解
元注解: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) 作用:@interface用来声明一个注解,其中的每 ...
- 红黑树和AVL树的实现与比较-----算法导论
一.问题描述 实现3种树中的两种:红黑树,AVL树,Treap树 二.算法原理 (1)红黑树 红黑树是一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是red或black.红黑树满足以 ...
- 结构体中使用#define定义宏
struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* ...
- Android --Vibrator--震动服务
1.取得震动服务的句柄 vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);或者vibrator = (Vibrator)getAppli ...
- SQL Server 基础 02 确保数据完整性
本章总结目的: 为了巩固 约束.事务! 约 束 使用数据库约束就是保证数据库的完整性的方法,SQL Server 涉及的完整性有三个: 1.实体完整性 : (不能为空且重复,即唯一的,例如身份证 ...