如何在两个进程间传递BMP???
进程A:实时获取摄像头得到的视频帧,可得到HBITMAP,然后通过CBitmap,可获得BITMAP。
进程B如何得到进程A获得的一个同样的BITMAP?
我想关键在于传递实际的像素信息,但是一直没有成功:(
我的做法:
进程A中:
CBitmap cb;
cb.Attach((HBITMAP)pHandle); //pHandle是一个其它类型的图片句柄
cb.GetBitmap(&(m_pFrame->image)); //m_pFrame是自定义的结构体指针,image为BITMAP cb.GetBitmapBits(800*600,&(m_pFrame->bit)); //bit为800*600大小的一维byte数组
然后通过内存共享,进程B可得到这些数据
进程B中:
myFileMapping.Read(buffer);
memcpy(frame,buffer,sizeof(FRAME));//这两行是读取A共享的数据
int x,y;
int nWidth=frame->image.bmWidth;
int nHeigh=frame->image.bmHeight;
BYTE *px = new BYTE[nHeigh*nWidth]; //声明暂存数组
for(int j=0;j<nWidth*nHeigh;j++)
px[j]=frame->bit[j];
CBitmap cb;
HBITMAP hBmp=NULL;
hBmp=::CreateBitmap(nWidth,nHeigh,frame->image.bmPlanes,frame->image.bmBitsPixel,px);
//BOOL r=cb.CreateBitmap(nWidth,nHeigh,frame->image.bmPlanes,frame->image.bmBitsPixel,px);
//cb.CreateBitmapIndirect(&(frame->image));
//DWORD r=cb.SetBitmapBits(nWidth*nHeigh,frame->bit);
但是无论是未注释掉的还是注释掉的方法,都以失败而告终,甚是郁闷
我不知道用800*600大小的数组对不对,因为我看到过这样的代码:
BYTE *bufferBmp = NULL ;
int sizeBmp = iW * iH * 4;
bufferBmp = (BYTE *)malloc(sizeof(BYTE) * sizeBmp) ;
cBitmap.GetBitmapBits(sizeBmp , bufferBmp);
这里用的是iW * iH * 4。
对图像处理不熟悉,很晕~
进程B如何得到进程A获得的一个同样的BITMAP?
我想关键在于传递实际的像素信息,但是一直没有成功:(
我的做法:
进程A中:
CBitmap cb;
cb.Attach((HBITMAP)pHandle); //pHandle是一个其它类型的图片句柄
cb.GetBitmap(&(m_pFrame->image)); //m_pFrame是自定义的结构体指针,image为BITMAP cb.GetBitmapBits(800*600,&(m_pFrame->bit)); //bit为800*600大小的一维byte数组
然后通过内存共享,进程B可得到这些数据
进程B中:
myFileMapping.Read(buffer);
memcpy(frame,buffer,sizeof(FRAME));//这两行是读取A共享的数据
int x,y;
int nWidth=frame->image.bmWidth;
int nHeigh=frame->image.bmHeight;
BYTE *px = new BYTE[nHeigh*nWidth]; //声明暂存数组
for(int j=0;j<nWidth*nHeigh;j++)
px[j]=frame->bit[j];
CBitmap cb;
HBITMAP hBmp=NULL;
hBmp=::CreateBitmap(nWidth,nHeigh,frame->image.bmPlanes,frame->image.bmBitsPixel,px);
//BOOL r=cb.CreateBitmap(nWidth,nHeigh,frame->image.bmPlanes,frame->image.bmBitsPixel,px);
//cb.CreateBitmapIndirect(&(frame->image));
//DWORD r=cb.SetBitmapBits(nWidth*nHeigh,frame->bit);
但是无论是未注释掉的还是注释掉的方法,都以失败而告终,甚是郁闷
我不知道用800*600大小的数组对不对,因为我看到过这样的代码:
BYTE *bufferBmp = NULL ;
int sizeBmp = iW * iH * 4;
bufferBmp = (BYTE *)malloc(sizeof(BYTE) * sizeBmp) ;
cBitmap.GetBitmapBits(sizeBmp , bufferBmp);
这里用的是iW * iH * 4。
对图像处理不熟悉,很晕~
...全文
相关推荐
VC++ BMP转JPG JPG转BMP
在VC++环境中,开发人员经常需要进行BMP与JPG之间的转换,以满足不同的应用场景需求。本文将详细介绍如何在VC++中实现这两个格式的转换,特别是通过调用外部DLL文件来完成。
将BufferedImage保存为BMP格式的文件
BMP文件。
bmp、jpg、gif图片隐写
隐写术是一种信息安全技术,其目的是在不引起注意的情况下秘密地传递信息。1.
oled0.96屏 电量图标 BMP
**编程接口**:在程序中调用显示函数时,正确地传递图像数据和坐标信息。在压缩包中的"电池电量"文件可能是转换后的字库文件,或者是用于生成字库的原始BMP图像。
教你使用VC打开BMP图像
**添加头文件和源代码** 引入头文件`Cdib.h`和源代码`CDIB.cpp`,这两个文件包含了处理BMP图像所需的功能。注意,此时编译并运行项目,虽然可以打开文件,但还无法显示图像。3.


进程/线程/DLL
