vc/mfc获取rgb图像数据后动态显示及保存图片的方法
来源:互联网 发布:删除旧版windows 编辑:程序博客网 时间:2024/06/06 09:15
vc/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;}
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- 将rgb图像数据保存为BMP格式图片的方法
- 将rgb图像数据保存为BMP格式图片的方法
- 基于对话框显示,动态显示jpg.bmp等图片,并获取鼠标移动的坐标值及rgb值
- MFC动态显示图片的方法
- matlab显示并保存RGB图像的单个通道图像
- android 从Imgeview中获取显示的图片不获取背景图片怎么获取,我用getDrawingCache()方法获取图片保存后背景图片也一起保存了。
- 【VC++】在MFC中显示IplImage图像的方法
- MFC子线程更改图像数据后更新主窗口图像显示方法
- 总结:VC#中从Clipboard保存获取数据的方法
- 图像处理--RGB到HSI的彩色转换--图像分割(MFC VC++)
- 装载-显示-保存图像的方法
- 获取及修改图像的RGB值和Alpha值
- MFC动态显示图片
- 图像的RGB通道显示
- opencv获取图像RGB值的两种方法
- vc 动态显示图片
- eclipse.ini
- c#中的流,字节,字符,字符串
- C# datatable的运用
- NHibernate
- ArmEabiPort
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- 搭建OpenGL在Eclipse底下的开发环境
- CopyU!新增“重置软件设置”的功能
- Xcode修改项目名
- 读书笔记:深入理解计算机系统 第四章
- oracle包體學習筆記
- Cf 98 Div.2
- linux隐藏属性 与 chattr
- Tomcat中配置和使用JNDI