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

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

第一种方法

#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. }

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

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

    该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib  链接库 //---------------- ...

  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. VC++ MFC获取对话框上控件的位置

    CRect rect; GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件的屏幕坐标 ScreenToClient(&rect);//转换 ...

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

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

随机推荐

  1. 国内一些SCM相关论坛站点

    SCMROAD: http://www.scmroad.com/forum.php SCMEYE:http://www.scmeye.com/ SVN管家:http://www.svnclub.com ...

  2. json 基础

    json格式 JSON格式:http://www.json.org/ python和JSON的关系请参考:http://docs.python.org/library/json.html JSON建构 ...

  3. Unity3D研究院之IOS全自动打包生成ipa

    接着上一篇文章, 自动生成framework,这篇文章我把shell自动化打包ipa整理了一下,希望大家喜欢,嘿嘿.. 建议大家先看一下上一篇文章.http://www.xuanyusong.com/ ...

  4. Volatile 说明

    Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低) ...

  5. UNIX command Questions Answers asked in Interview

    UNIX or Linux operating system has become default Server operating system and for whichever programm ...

  6. Ubuntu环境下手动配置HBase0.94.25

    /×××××××××××××××××××××××××××××××××××××××××/ Author:xxx0624 HomePage:http://www.cnblogs.com/xxx0624/ ...

  7. Matlab中编译C++文件

    今天在跑<Robust Object Tracking via Sparsity-based Collaborative Model>这篇文章的代码时候,发现出现如下错误: 发现错误时由于 ...

  8. windows系统下Python环境的搭建

    1.下载最新的Python版本3.5.0.

  9. js问题总结

    .removeClass(" ") 移除一个css样式 $("#popUpBox i").removeClass("channel_icon" ...

  10. 在CentOS 6.X 上面安装 Python 2.7.X

    在CentOS 6.X 上面安装 Python 2.7.X CentOS 6.X 自带的python版本是 2.6 , 由于工作需要,很多时候需要2.7版本.所以需要进行版本升级.由于一些系统工具和服 ...