该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像

第一种方法

#include<vfw.h>

加载 vfw32.lib  链接库

  1. //------------------------------设置位图头结构信息----------------------------------------------------------------------
  2. // Setup bmpinfo structure yourself
  3. m_bmpinfo=new BITMAPINFO;    // PBITMAPINFO *m_bmpinfo;
  4. //  m_bmpinfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
  5. m_bmpinfo->bmiHeader.biSize=sizeof(BITMAPINFO);
  6. m_bmpinfo->bmiHeader.biWidth=IMG_WIDTH;
  7. m_bmpinfo->bmiHeader.biHeight=IMG_HEIGHT;
  8. m_bmpinfo->bmiHeader.biPlanes=1;
  9. m_bmpinfo->bmiHeader.biBitCount=24;
  10. m_bmpinfo->bmiHeader.biCompression=0;
  11. m_bmpinfo->bmiHeader.biSizeImage=0;
  12. m_bmpinfo->bmiHeader.biXPelsPerMeter=0;
  13. m_bmpinfo->bmiHeader.biYPelsPerMeter=0;
  14. m_bmpinfo->bmiHeader.biClrUsed=0;
  15. m_bmpinfo->bmiHeader.biClrImportant=0;
  16. //-------------在内存中绘制位图头信息-----------------------------------------------------------------------------------
  17. // Initialize DIB for drawing...
  18. hdib=::DrawDibOpen();    // HDRAWDIB hdib;
  19. if(hdib!=NULL)
  20. {
  21. ::DrawDibBegin(hdib,
  22. m_hdc,
  23. -1,    // don't stretch
  24. -1,    // don't stretch
  25. &m_bmpinfo->bmiHeader,
  26. IMG_WIDTH,         // width of image
  27. IMG_HEIGHT,        // height of image
  28. 0
  29. );
  30. }
  31. //---------------绘制位图数据 buf--------------char* buf--------------------------------------------------------------------
  32. ::DrawDibDraw(hdib,
  33. m_hdc,
  34. local_wnd_x,  // dest : left pos
  35. local_wnd_y,  // dest : top pos
  36. -1,      // -1 don't zoom x
  37. -1,      // -1 don't zoom y
  38. &m_bmpinfo->bmiHeader, // bmp header info
  39. buf,      // bmp data
  40. 0,      // src :left
  41. 0,      // src :top
  42. IMG_WIDTH,     // src : width
  43. IMG_HEIGHT,     // src : height
  44. DDF_SAME_DRAW    // use prev params....
  45. );
  46. //------------------------------结束绘制---------------------------------------------------------------------
  47. // Close graphics....
  48. if(hdib!=NULL)
  49. {
  50. ::DrawDibEnd(hdib);
  51. ::DrawDibClose(hdib);
  52. }

//***********************************************

第二种方法

  1. BITMAPINFO *m_bmphdr;
  2. DWORD dwBmpHdr = sizeof(BITMAPINFO);
  3. m_bmphdr = new BITMAPINFO[dwBmpHdr];
  4. m_bmphdr->bmiHeader.biBitCount = 24;
  5. m_bmphdr->bmiHeader.biClrImportant = 0;
  6. m_bmphdr->bmiHeader.biSize = dwBmpHdr;
  7. m_bmphdr->bmiHeader.biSizeImage = 0;
  8. m_bmphdr->bmiHeader.biWidth = IMG_WIDTH;
  9. m_bmphdr->bmiHeader.biHeight = IMG_HEIGHT;
  10. m_bmphdr->bmiHeader.biXPelsPerMeter = 0;
  11. m_bmphdr->bmiHeader.biYPelsPerMeter = 0;
  12. m_bmphdr->bmiHeader.biClrUsed = 0;
  13. m_bmphdr->bmiHeader.biPlanes = 1;
  14. m_bmphdr->bmiHeader.biCompression = BI_RGB;
  15. int nResult = ::StretchDIBits(m_hdc,
  16. local_wnd_x,
  17. local_wnd_y,
  18. IMG_WIDTH,//rc.right - rc.left,
  19. IMG_HEIGHT,//rc.top,
  20. 0, 0,
  21. IMG_WIDTH, IMG_HEIGHT,
  22. buf,
  23. m_bmphdr,
  24. DIB_RGB_COLORS,
  25. SRCCOPY);

保存成bmp图片文件

    1. // 创建位图文件
    2. BOOL SaveBitmap(BYTE *pBuffer, long lBufferLen)
    3. {
    4. HANDLE hf = CreateFile(m_szFileName, GENERIC_WRITE,
    5. FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);
    6. if (hf == INVALID_HANDLE_VALUE) return 0;
    7. // 写文件头
    8. BITMAPFILEHEADER fileheader;
    9. ZeroMemory(&fileheader, sizeof(BITMAPFILEHEADER));
    10. fileheader.bfType = 'MB';
    11. fileheader.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+lBufferLen;
    12. fileheader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
    13. DWORD dwWritter = 0;
    14. WriteFile(hf, &fileheader, sizeof(BITMAPFILEHEADER), &dwWritter, NULL);
    15. // 写文图格式
    16. BITMAPINFOHEADER infoHeader;
    17. ZeroMemory(&infoHeader, sizeof(BITMAPINFOHEADER));
    18. infoHeader.biSize = sizeof(BITMAPINFOHEADER);
    19. infoHeader.biSizeImage = lBufferLen;
    20. infoHeader.biWidth = lWidth;
    21. infoHeader.biHeight = lHeight;
    22. infoHeader.biBitCount = 24;
    23. WriteFile(hf, &infoHeader, sizeof(BITMAPINFOHEADER), &dwWritter, NULL);
    24. // 写位图数据
    25. WriteFile(hf, pBuffer, lBufferLen, &dwWritter, NULL);
    26. CloseHandle(hf);
    27. MessageBox(NULL, _T("Save bmp file succeed!"), _T("warn"), MB_OK|MB_ICONINFORMATION);
    28. return 0;
    29. }
 

MFC获取rgb图像数据后动态显示及保存图片的方法的更多相关文章

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

    vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw3 ...

  2. [转]MFC子线程更改图像数据后更新主窗口图像显示方法

    程序思路是由外部的输入输出控制卡发出采集图像信号,之后相机采集图像得到图像数据指针,接收图像数据指针创建成图像最后显示到MFC对话框应用程序的Picture Control控件上,同时,为了标定相机位 ...

  3. RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB

    jackyhwei 发布于 2010-01-01 12:02 点击:3218次  来自:CSDN.NET 一些非常有用的图像格式转换及使用的源代码,包括RGB图像数据字符叠加,图像压缩(ijl库),Y ...

  4. ajax获取动态列表数据后的分页问题

    ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...

  5. RDS for MySQL 删除数据后空间没有减少处理方法

    公司的程序和数据库部署在阿里云上,数据库使用的是阿里云的RDS,这天,经理在开发群中发了一个信息: 您的RDS实例rm********0oq的磁盘在过去一周平均使用率已超过80.%,建议您对实例规格进 ...

  6. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    前言   上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤.   受限制   因为直接配置sample的vi比较麻烦 ...

  7. Oracle导入数据后中文乱码的解决方法

    解决方法: 方法一. 1.在运行命令行输入regedit,打开注册表编辑器 2.找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1 3.看N ...

  8. sql server删除数据后空间无变化处理方法

    删除数据库表 第一步: 执行 delete from doc.115sou.com        #删除数据,执行效率低 drop table doc.115sou.com          #删除表 ...

  9. 在navcat中清空数据后,设置id归零方法

    写后台完成后,需要清空Mysql数据库中的测试数据,但是后面新增的数据,一直是以原来所删除数据的最大id为增量基本,比如,对于一些id敏感的项,十分不便,如图 原有10条数据,清空后,新增一两条,手动 ...

随机推荐

  1. hadoop、spark/storm等大数据相关视频资料汇总下载

    小弟不才,工作中也用到了大数据的相关东西.一開始接触的时候,是通过买来的教学视频入的门.这两天整理了一下自己的视频资料.供各位进行下载. 文档截图:

  2. CSS的三种样式:内联式,嵌入式,外部式以及他们的优先级

    从CSS 样式代码插入的形式来看基本能够分为下面3种:内联式.嵌入式和外部式三种. 1:内联式css样式表就是把css代码直接写在现有的HTML标签中,如以下代码: <p style=" ...

  3. ThinkPHP - 扩展个人类库 - 以验证码类为例子

    首先,在项目目录下创建Class文件夹,用于存储个人类文件. 之后建立Data目录存放所需字体文件,其他的数据也可以放在这个文件夹下. 然后再Conf文件夹下创建verify.php配置文件. 在co ...

  4. listview 拖动item效果实现

    listview 拖动item效果实现 效果图如下: 拖拽前: 拖拽后: 首先参考源码中:TouchInterceptor 类,该类会在下面给出: 第一步:主类: /**  *   */ packag ...

  5. oracle常用函数以及调用入参为record的存储过程的方法,

    转自:http://www.cnblogs.com/zhangronghua/archive/2007/08/20/862812.html SQL中的单记录函数1.ASCII返回与指定的字符对应的十进 ...

  6. .NET通过PowerShell操作ExChange为用户开通邮箱账号

    最近工作中一个web项目需要集成exchange邮箱服务,注册用户时需要动态创建邮箱用户,终于在http://www.cnblogs.com/gongguo/archive/2012/03/12/23 ...

  7. Qt中文件操作遇到的(变量,容器,结构体)

    咳咳!总结了一下我在使用QT文件操作时所用到的,再接再厉!再接再厉!! 1.保存到文件: QFile file("test.txt"); if (!file.open(QIODev ...

  8. Python 2.7 学习笔记 字典(map)的使用

    python中的字典,就是通常说的map,即 key/value集合的数据结构. 本文来介绍下在python下如何使用字典. 对于map这种数据结构能干什么,我们就不说了,这是一个常见的数据结构,我们 ...

  9. docker学习笔记15:Dockerfile 指令 USER介绍

    USER指令用于指定容器执行程序的用户身份,默认是 root用户. 在docker run 中可以通过 -u 选项来覆盖USER指令的设置. 举例:docker run -i -t -u mysql ...

  10. 【引用】Linux 内核驱动--多点触摸接口

    本文转载自James<Linux 内核驱动--多点触摸接口>   译自:linux-2.6.31.14\Documentation\input\multi-touch-protocol.t ...