如何将内存封装技术图像数据封装成QImage V1

C++进程共享数据封装成类实例
本文实例讲述了C++进程共享数据封装成类的方法,分享给大家供大家参考。具体方法如下:
ShareMemory.cpp源文件如下:
代码如下:#include "ShareMemory.h"&
CShareMemory::CShareMemory(const&&& char* pszMapName, int nFileSize, BOOL bServer):m_hFileMap(NULL),m_pBuffer(NULL)&
&&& if (bServer) //是服务端,就创建&
&&&&&&& m_hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE, 0, nFileSize, pszMapName);&
&&& else //否则就打开&
&&&&&&& m_hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, pszMapName);&
&&& //把它映射到内存&
&&& m_pBuffer = ::MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);&
CShareMemory::~CShareMemory(void)&
&&& ::UnmapViewOfFile(m_pBuffer);&
&&& ::CloseHandle(m_hFileMap);&
ShareMemory.h头文件如下:
代码如下:#pragma once&
#include &Windows.h&&
class CShareMemory&
&&& CShareMemory(const& char* pszMapName, int nFileSize=0, BOOL bServer=FALSE);&
&&& ~CShareMemory(void);&
&&& //属性&
&&& LPVOID GetBuffer() const&&
&&&&&&& return m_pB&
&&& //实现&
&&& HANDLE m_hFileM&
&&& LPVOID m_pB&
使用时用法如下:
代码如下:#include "ShareMemory.h"&
int main(int argc, char *argv[])&
&&& //进程间内存共享&
&&& LPCTSTR lpName= "hello";&
&&& LPCTSTR lpContent = "123456";&
&&& CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE);&
&&& LPVOID lpBase = pShareMemory-&GetBuffer();&
&&& strcpy((char*)lpBase, lpContent);&
&&& printf("%s\n",(char*)pShareMemory-&GetBuffer());&
&&& getchar();&
&&& return 0;&
代码如下:#include "ShareMemory.h"&
int main(int argc, char *argv[])&
&&& //进程间内存共享&
&&& LPCTSTR lpName= "hello";&
&&& LPCTSTR lpContent = "123456";&
&&& CShareMemory* pShareMemory = new CShareMemory(lpName, 20, FALSE);&
&&& printf("%s\n",(char*)pShareMemory-&GetBuffer());&
&&& getchar();&
&&& return 0;&
希望本文所述对大家的C++程序设计有所帮助。
顶一下(0) 踩一下(0)
热门标签:Posts - 135,
Articles - 0,
Comments - 5
随笔分类 -视频音频
23:12 by 江湖么名, 178 阅读, ,
经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理。以前一直很懒,懒得测试和甄 别应该使用哪种算法,最近的工作时间,很多时候需要等待别人。忙里偷闲,对ffmpeg的这一组函数进行了一下封装,顺便测试了一下各种算法。简单说一下测试环境,我使用的是Dell的品牌机,i5的CPU。ffmpeg是2010年8月左右的当时最新版本编译而成,我使用的是其静态库版本。sws_scale的算法有如下这些选择。#define SWS_FAST_BILINEAR 1#define SWS_BILINEAR 2#define SW...
23:00 by 江湖么名, 172 阅读, ,
问题出现在下载的ffmpeg的版本不一样,在0.4.8以前的版本中还有img_convert这个函数,新版本中用sws_getContext和sws_scale代替了。简单说明如下:新版本的ffmpeg添加了新的接口:libswscale来处理图像缩放。以前使用img_convert来把RGB转换成YUV12,现在使用新的接口。新接口更加标准和快速,而且里面有了MMX优化代码。换句话说,它是做缩放更好的方式。用来缩放的基本函数是sws_scale。但一开始,必需建立一个SwsContext的概念。这将进行想要的转换,然后把它传递给 sws_scale函数。类似于在SQL中的预备阶段或者是在Py
14:00 by 江湖么名, 243 阅读, ,
转:/bibei1234/p/3161555.html如何将内存图像数据封装成QImage当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放、旋转)操作。如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像处理功能来进行图像处理,并能很好的进行显示。 在内存中,8bit灰度图像的宽度有可能不能满足BMP格式需求(为4的倍数),在封装成8bit灰度QImage时,会遇到封装不完整或错误的问题。本人总结了该问题,写了一个封装内存8bit灰度图像数据的C++类。首先看代码部分://BufferToQImage.如何将内存图像数据封装成QImage
如何将内存图像数据封装成QImage
&&&&&&& 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放、旋转)操作。如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像处理功能来进行图像处理,并能很好的进行显示。
&&&&&& 下面以灰度相机为例,介绍封装方法:
&&&&&& 第一步:首先根据相机的SDK内的读图像函数,获取图像数据imgData、宽度imgWidth和高度imHeight。
&&&&&& 第二步:申请QImage对象,注意类型是Format_RGB32.
&&&&&& 第三步:利用成员函数setPixel()设置QImage像素。由于相机输出的图像是灰度图像,每一位置的R、G、B分量相等且均等于当前位置的像素值。
&&&&&& 具体程序如下:
QImage desImage = QImage(imgWidth,imgHeight,QImage::Format_RGB32); //RGB32&&
//RGB分量值&&
int b = 0;&
int g = 0;&
int r = 0;&&
//设置像素&&
for (int i=0;i&imgHi++)&
&&& for (int j=0;j&imgWj++)&
&&&&&&& b = (int)*(imgDataNew+i*imgWidth+j);&
&&&&&&& g =&
&&&&&&& r =&
&&&&&&& desImage.setPixel(j,i,qRgb(r,g,b));&
&QImage desImage = QImage(imgWidth,imgHeight,QImage::Format_RGB32); //RGB32
&//RGB分量值
&int b = 0;
&int g = 0;
&int r = 0;
&//设置像素
&for (int i=0;i&imgHi++)
&&for (int j=0;j&imgWj++)
&&&b = (int)*(imgDataNew+i*imgWidth+j);
&&&desImage.setPixel(j,i,qRgb(r,g,b));
对于灰度图像数据,如下封装方式是错误的。
QImage desImage = QImage(imgData, imgWidth, imgHeight, QImage::Format_Indexed8)
原因是QImage的构造函数中写道:
Constructs an image with the given width, height and format, that uses an existing memory buffer, data. The width and height must be specified in pixels, data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned.如何将内存图像数据封装成QImage
如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放、旋转)操作。如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像处理功能来进行图...
如何将内存图像数据封装成QImage
当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放、旋转)操作。如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像处理功能来进行图像处理,并能很好的进行显示。
下面以灰度相机为例,介绍封装方法:
第一步:首先根据相机的SDK内的读图像函数,获取图像数据imgData、宽度imgWidth和高度imHeight。
第二步:申请QImage对象,注意类型是Format_RGB32.
第三步:利用成员函数setPixel()设置QImage像素。由于相机输出的图像是灰度图像,每一位置的R、G、B分量相等且均等于当前位置的像素值。
具体程序如下:
QImage desImage = QImage(imgWidth,imgHeight,QImage::Format_RGB32); //RGB32
//RGB分量值
int b = 0;
int g = 0;
int r = 0;
//设置像素
for (int i=0;i&imgHi++)
for (int j=0;j&imgWj++)
b = (int)*(imgDataNew+i*imgWidth+j);
desImage.setPixel(j,i,qRgb(r,g,b));
QImage desImage = QImage(imgWidth,imgHeight,QImage::Format_RGB32); //RGB32
//RGB分量值
int b = 0;
int g = 0;
int r = 0;
//设置像素
for (int i=0;i&imgHi++)
for (int j=0;j&imgWj++)
b = (int)*(imgDataNew+i*imgWidth+j);
desImage.setPixel(j,i,qRgb(r,g,b));
对于灰度图像数据,如下封装方式是错误的。
QImage desImage = QImage(imgData, imgWidth, imgHeight, QImage::Format_Indexed8)
原因是QImage的构造函数中写道:
Constructs an image with the given width, height and format, that uses an existing memory buffer, data. The width and height must be specified in pixels, data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned.君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何将内存图像数据封装成QImage
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 qimage读取图像 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信