📄 imagemanager.cpp
字号:
case RGB8888:
dwMemSize=m_CardProperty1.m_imageWidth * m_CardProperty1.m_imageHeight*4;
break;
case YUV422:
case RGB565:
case RGB555:
dwMemSize=m_CardProperty1.m_imageWidth * m_CardProperty1.m_imageHeight*2;
break;
case ALL8BIT:
case LIMITED8BIT:
dwMemSize=m_CardProperty1.m_imageWidth * m_CardProperty1.m_imageHeight;
break;
}
if(m_CardOpenState.m_bCard1Opened&&m_CardCapState.m_bCard1Capturing)
{
switch(m_CardProperty1.m_VideoScanMode)
{
case FIELD:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card1, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard1, &nNum);
if(nNum==0||nNum==1)
{
TrasformToCardOutMem(1,pLineAddr+dwMemSize,m_CardProperty1.m_VideoFormat);
}
else if(nNum==2||nNum==3)
{
TrasformToCardOutMem(1,pLineAddr,m_CardProperty1.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
case FRAME:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card1, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard1, &nNum);
if(nNum==0)
{
TrasformToCardOutMem(1,pLineAddr+dwMemSize,m_CardProperty1.m_VideoFormat);
}
else if(nNum==1)
{
TrasformToCardOutMem(1,pLineAddr,m_CardProperty1.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
}
}
break;
case 2:
switch(m_CardProperty2.m_VideoFormat)
{
case RGB888:
dwMemSize=m_CardProperty2.m_imageWidth*m_CardProperty2.m_imageHeight*3;
break;
case RGB8888:
dwMemSize=m_CardProperty2.m_imageWidth * m_CardProperty2.m_imageHeight*4;
break;
case YUV422:
case RGB565:
case RGB555:
dwMemSize=m_CardProperty2.m_imageWidth * m_CardProperty2.m_imageHeight*2;
break;
case ALL8BIT:
case LIMITED8BIT:
dwMemSize=m_CardProperty2.m_imageWidth * m_CardProperty2.m_imageHeight;
break;
}
if(m_CardOpenState.m_bCard2Opened&&m_CardCapState.m_bCard2Capturing)
{
switch(m_CardProperty2.m_VideoScanMode)
{
case FIELD:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card2, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard2, &nNum);
if(nNum==0||nNum==1)
{
TrasformToCardOutMem(2,pLineAddr+dwMemSize,m_CardProperty2.m_VideoFormat);
}
else if(nNum==2||nNum==3)
{
TrasformToCardOutMem(2,pLineAddr,m_CardProperty2.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
case FRAME:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card2, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard2, &nNum);
if(nNum==0)
{
TrasformToCardOutMem(2,pLineAddr+dwMemSize,m_CardProperty2.m_VideoFormat);
}
else if(nNum==1)
{
TrasformToCardOutMem(2,pLineAddr,m_CardProperty2.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
}
}
break;
case 3:
switch(m_CardProperty3.m_VideoFormat)
{
case RGB888:
dwMemSize=m_CardProperty3.m_imageWidth*m_CardProperty3.m_imageHeight*3;
break;
case RGB8888:
dwMemSize=m_CardProperty3.m_imageWidth * m_CardProperty3.m_imageHeight*4;
break;
case YUV422:
case RGB565:
case RGB555:
dwMemSize=m_CardProperty3.m_imageWidth * m_CardProperty3.m_imageHeight*2;
break;
case ALL8BIT:
case LIMITED8BIT:
dwMemSize=m_CardProperty3.m_imageWidth * m_CardProperty3.m_imageHeight;
break;
}
if(m_CardOpenState.m_bCard3Opened&&m_CardCapState.m_bCard3Capturing)
{
switch(m_CardProperty3.m_VideoScanMode)
{
case FIELD:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card3, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard3, &nNum);
if(nNum==0||nNum==1)
{
TrasformToCardOutMem(3,pLineAddr+dwMemSize,m_CardProperty3.m_VideoFormat);
}
else if(nNum==2||nNum==3)
{
TrasformToCardOutMem(3,pLineAddr,m_CardProperty3.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
case FRAME:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card3, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard3, &nNum);
if(nNum==0)
{
TrasformToCardOutMem(3,pLineAddr+dwMemSize,m_CardProperty3.m_VideoFormat);
}
else if(nNum==1)
{
TrasformToCardOutMem(3,pLineAddr,m_CardProperty3.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
}
}
break;
case 4:
switch(m_CardProperty4.m_VideoFormat)
{
case RGB888:
dwMemSize=m_CardProperty4.m_imageWidth*m_CardProperty4.m_imageHeight*3;
break;
case RGB8888:
dwMemSize=m_CardProperty4.m_imageWidth * m_CardProperty4.m_imageHeight*4;
break;
case YUV422:
case RGB565:
case RGB555:
dwMemSize=m_CardProperty4.m_imageWidth * m_CardProperty4.m_imageHeight*2;
break;
case ALL8BIT:
case LIMITED8BIT:
dwMemSize=m_CardProperty4.m_imageWidth * m_CardProperty4.m_imageHeight;
break;
}
if(m_CardOpenState.m_bCard4Opened&&m_CardCapState.m_bCard4Capturing)
{
switch(m_CardProperty4.m_VideoScanMode)
{
case FIELD:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card4, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard4, &nNum);
if(nNum==0||nNum==1)
{
TrasformToCardOutMem(4,pLineAddr+dwMemSize,m_CardProperty4.m_VideoFormat);
}
else if(nNum==2||nNum==3)
{
TrasformToCardOutMem(4,pLineAddr,m_CardProperty4.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
case FRAME:
nStatus=CGStaticMemLock(m_CardMemState.m_dwInputMemOffset_Card4, dwMemSize*2, &hHandle, (PVOID *)&pLineAddr);
if(nStatus==CG_OK)
{
CGGetSnappingNumber(m_CardHandle.m_hCard4, &nNum);
if(nNum==0)
{
TrasformToCardOutMem(4,pLineAddr+dwMemSize,m_CardProperty4.m_VideoFormat);
}
else if(nNum==1)
{
TrasformToCardOutMem(4,pLineAddr,m_CardProperty4.m_VideoFormat);
}
CGStaticMemUnlock(hHandle);
return TRUE;
}
break;
}
}
break;
}
return FALSE;
}
/************************************************************************/
/* ShowImage() */
/************************************************************************/
/* */
/*功能描述: 显示图像 */
/* */
/*输入参数: HDC hDC; -图像显示窗口的设备描述句柄; */
/* CRect rcShow; -图像显示区域; */
/* int imageWidth; -图像宽度,单位:像素; */
/* int imageHeight;-图像高度,单位:像素; */
/* BYTE *pData; -图像数据指针 */
/* */
/*调用前提: 无 */
/* */
/* 返回值: BOOL; =TRUE -显示成功; */
/* =FALSE -显示失败, */
/* */
/*变量输出: 无 */
/* */
/*其它说明: -该函数的调用同类内各变量无关,因此可在外部独立调用。 */
/* */
/************************************************************************/
BOOL CImageManager::ShowImage(HDC hDC,CRect rcShow,int imageWidth,int imageHeight,BYTE *pData)
{
BITMAPINFOHEADER ImageInfo;
ImageInfo.biBitCount = 24;
ImageInfo.biClrImportant = 0;
ImageInfo.biClrUsed = 0;
ImageInfo.biCompression = BI_RGB;
ImageInfo.biPlanes = 1;
ImageInfo.biSize = 40;
ImageInfo.biXPelsPerMeter = 0;
ImageInfo.biYPelsPerMeter = 0;
ImageInfo.biWidth=imageWidth;
ImageInfo.biHeight=imageHeight;
ImageInfo.biSizeImage=ImageInfo.biWidth*ImageInfo.biHeight*3;
SetStretchBltMode(hDC,COLORONCOLOR);
StretchDIBits(hDC, rcShow.left,rcShow.top,rcShow.Width(),
rcShow.Height(),0,0,ImageInfo.biWidth,ImageInfo.biHeight,
pData,(BITMAPINFO *) &ImageInfo, DIB_RGB_COLORS,SRCCOPY);
return TRUE;
}
/************************************************************************/
/* TrasformToCardOutMem() */
/************************************************************************/
/* */
/*功能描述: 将pOriginData所指定内存中的nOriginFormat格式的图像数据, */
/* 转换为相应的24Bits图像,并将其保存至由nCardNo所对应的用户 */
/* 内存中。根据静态内存中采集一帧图像至用户内存。 */
/* */
/*输入参数: int nCardNo; -卡号,取值范围1-4; */
/* BYTE *pOriginData; -源图像存储地址; */
/* VIDEO_FORMAT nOriginFormat; -源图像格式。 */
/* */
/*调用前提: - 1) 打开图像卡,并且正在采集至静态内存,调用BeginCapture;*/
/* - 2) 用户内存已经分配,调用SetOutImageMem; */
/* - 3) nCardNo路输出图像的属性已经配置。 */
/* */
/* 返回值: BOOL; =TRUE -采集成功; */
/* =FALSE -采集失败, */
/* */
/*变量输出: 无 */
/* */
/*其它说明: -该函数由SnapOneToMem()调用 */
/* */
/************************************************************************/
void CImageManager::TrasformToCardOutMem(int nCardNo,BYTE *pOriginData,VIDEO_FORMAT nOriginFormat)
{
unsigned int i,j;
unsigned int W,H;
BYTE *pd;
BYTE *ps;
BYTE *pBase;
DWORD dwDataSize;
BYTE byteTemp,byteTemp1;
ps=pOriginData;
switch(nCardNo)
{
case 1:
W=m_CardProperty1.m_imageWidth;
H=m_CardProperty1.m_imageHeight;
dwDataSize=W*H*3;
pBase=m_CardMemState.m_pucOutputImage_Card1;
break;
case 2:
W=m_CardProperty2.m_imageWidth;
H=m_CardProperty2.m_imageHeight;
dwDataSize=W*H*3;
pBase=m_CardMemState.m_pucOutputImage_Card2;
break;
case 3:
W=m_CardProperty3.m_imageWidth;
H=m_CardProperty3.m_imageHeight;
dwDataSize=W*H*3;
pBase=m_CardMemState.m_pucOutputImage_Card3;
break;
case 4:
W=m_CardProperty4.m_imageWidth;
H=m_CardProperty4.m_imageHeight;
dwDataSize=W*H*3;
pBase=m_CardMemState.m_pucOutputImage_Card4;
break;
}
switch(nOriginFormat)
{
case YUV422:
for(j=0;j<H;j++)
{
for(i=0;i<W;i+=2)
{
ps=pOriginData+(H-1-j)*W*2+i*2;
pd=pBase+j*W*3+i*3;
*pd=*ps;
*(pd+1)=*(ps+1);
*(pd+2)=*(ps+3);
*(pd+3)=*(ps+2);
*(pd+4)=*(ps+1);
*(pd+5)=*(ps+3);
}
}
break;
case ALL8BIT:
case LIMITED8BIT:
for(j=0;j<H;j++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -