如何在两个进程间传递BMP???

sizheng0320 sizheng0320 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
进程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。

对图像处理不熟悉,很晕~
...全文
评论 21
收藏 已收藏
分享
返回顶部
sizheng0320
进程/线程/DLL 15,465 成员 49,169 内容