如何在两个进程间传递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。
对图像处理不熟悉,很晕~