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

第一种方法

#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. 如何快速方便的输出向量vector容器中不重复的内容

    在vector容器中,存入的内容难免会出现重复,那么如何快速输出或提前非重复的那些数据呢,即重复的数据只输出一次,直观的方法是每次输出都要通过循环比较是否已经输出过,这种方法还是比较费时的,可以利用u ...

  2. VS2005+WINDDK+Driver Studio 3.2个人总结

    通过在网上搜索大量的资料,终于把环境搭建起来.对于我这样的驱动新手来说,理应把高手们的东西整理并总结下,方便以后的初学者. 这三个软件的安装顺序没有具体规定,也有高手推荐的顺序,我自己也是重复安装卸载 ...

  3. 【Oracle】SQL*Loader-522: lfiopn failed for file

    Linux下使用sqlldr进行批量操作,此操作会自动生成和删除临时文件. 因此,当前操作的用户必须具备对存放文件的文件夹有增删改的权限. 使用root登录,修改改文件夹权限为777即可. chmod ...

  4. 面向对象程序设计-C++ Class & Object & Friend Function & Constructor & Destructor【第五次上课笔记】

    大家可以下载后用Vim 或者 Sublime Text等文本编辑器查看 以下代码均已折叠,点击“+“即可打开 一开始老师用C语言大作业的例子,写了个 Student 的结构以及相关操作 #includ ...

  5. 多层TreeWidget可选实现

    http://download.csdn.net/detail/lingyunfuyu2/9117481

  6. stdcall、cdecl、fastcall、thiscall 、naked call的汇编详解

    函数调用规范   当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者 ...

  7. 46黑名单显示的bug---(优化ListView)convertView复用带来的问题

    是这种需求: 在黑名单的列表中前三个显示特殊的颜色,后面的列表显示其它的颜色,如图: 可是当翻到第二屏的时候.我们发现了: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  8. weblogic公布的项目用途myeclipse正常启动,点击startWeblogic.cmd报错解决方案

    今天在做项目中遇到的问题.使用weblogic公布的项目,使用myeclipse正常启动,但点击startWeblogic.cmd会报错.我提出了一个class not found.楚是什么问题.后来 ...

  9. Nagiosserver端安装部署具体解释(1)

    下载地址例如以下: http://sourceforge.net/projects/nagios/files/ 具体具体下载地址:http://prdownloads.sourceforge.net/ ...

  10. vector的内存释放

    转自:http://www.cnblogs.com/summerRQ/articles/2407974.html vector : C++ STL中的顺序容器,封装数组 1. vector容器的内存自 ...