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

第一种方法

#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. 如何成为CSDN博客专家

    先看一下官方给出的要求: 申请CSDN博客专家应具备的条件: 1.原创IT类文章总数超过20篇,并且最近一个月内发布了新的原创IT类文章. 2.博客文章总的浏览量超过5万次以上. 3.文章内容的质量很 ...

  2. Spring IOC和DI原理讲解并制作LazyCoder版的Spring (一)

    转载请注意出处:http://blog.csdn.net/zcm101 写在前面的话 最近,给项目组成员培训了Spring 控制反转和依赖注入的原理,并自己做了个Lazy Coder版的Spring, ...

  3. 敬请贤者:WEB、IOS开发(2年以上经验,大专);CTO、产品经理,运营专员 电商服装鞋饰买手(2年以上经验,服装或鞋类);体验店店长 (2年以上经验,服装或鞋类) 工作地点:丰台南苑路;有意者小窗QQ2211788980 - V2EX

    敬请贤者:WEB.IOS开发(2年以上经验,大专):CTO.产品经理,运营专员 电商服装鞋饰买手(2年以上经验,服装或鞋类):体验店店长 (2年以上经验,服装或鞋类) 工作地点:丰台南苑路:有意者小窗 ...

  4. OCP-1Z0-051-题目解析-第25题

    25. You need to create a table with the following column specifications:  1. Employee ID (numeric da ...

  5. [置顶] c# datagridview‘s learn

    c#   一串数字“1122331111155”,要输出到DataGridview控件上,但是要逐个数字读取,如果上一个数字与下一个相同,则排成一列,不相同,则另外排成一列.如“11223311111 ...

  6. 查看linux下各数据类型的大小

    代码如下: #include<stdio.h> int main() { printf("int:%d bytes\n",sizeof(int)); printf(&q ...

  7. Android模拟器的文件目录介绍

    文件存放在 .avd文件夹下 .ini为对应的配置文件     打开.avd文件夹 *.lock文件夹保存的是模拟器的一下数据,当模拟器正常关闭时这些文件夹都会被自动删除. 当模拟器无法开启的时候可以 ...

  8. 自己用js写的两个日历控件

    前一阵写了两个日历控件,做了简单的封装,发出来共朋友们参考. 第一个日历控件,条状的日历. (使用方法:调用initBarTime(id,evn),第一个参数是要渲染div的id,第二个参数是点击日期 ...

  9. mysql入门记录

    mysql -h localhost(or ID) -u root -p show databases; create database <数据库名>: drop database < ...

  10. HDOJ 1598 Kruscal

    贪心思想的Kruscal:先对边排序,再从第一条边开始,一旦start point 和 end poiont 连上,就break #include <stdio.h> #include & ...