📄 imagemanager.cpp
字号:
/************************************************************************/
/* BeginCapture() */
/************************************************************************/
/* */
/*功能描述: 启动图像向静态内存中的动态采集。 */
/* */
/*输入参数: int nCardNo;-卡号,取值范围1-4 */
/* */
/*调用前提: - 1) 打开图像卡; */
/* - 2) 为各路图像卡设置好相应的静态内存偏移量和大小; */
/* - 3) nCardNo路输出图像的属性已经配置。 */
/* */
/* 返回值: BOOL; =TRUE -启动成功; */
/* =FALSE -启动失败, */
/* */
/*变量输出: 无 */
/* */
/*其它说明: -1) 图像采集至m_CardMemState变量中相应于第nCardNo路的 */
/* 偏移量处,该采集过程不占用CPU时间。 */
/* -2) 启动后,可以调用SnapOneToMem()将图像采集至用户设定 */
/* 内存。 */
/* */
/************************************************************************/
BOOL CImageManager::BeginCapture(int nCardNo)
{
CGSTATUS nStatus;
switch(nCardNo)
{
case 1:
if(m_CardOpenState.m_bCard1Opened)
{
if(!m_CardCapState.m_bCard1Capturing)
{
if(m_CardProperty1.m_VideoScanMode==FRAME)
nStatus=CGStartSnap(m_CardHandle.m_hCard1, m_CardMemState.m_dwInputMemOffset_Card1, TRUE, 2);
else if(m_CardProperty1.m_VideoScanMode==FIELD)
nStatus=CGStartSnap(m_CardHandle.m_hCard1, m_CardMemState.m_dwInputMemOffset_Card1, TRUE, 4);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard1Capturing=true;
return TRUE;
}
}
}
break;
case 2:
if(m_CardOpenState.m_bCard2Opened)
{
if(!m_CardCapState.m_bCard2Capturing)
{
if(m_CardProperty2.m_VideoScanMode==FRAME)
nStatus=CGStartSnap(m_CardHandle.m_hCard2, m_CardMemState.m_dwInputMemOffset_Card2, TRUE, 2);
else if(m_CardProperty2.m_VideoScanMode==FIELD)
nStatus=CGStartSnap(m_CardHandle.m_hCard2, m_CardMemState.m_dwInputMemOffset_Card2, TRUE, 4);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard2Capturing=true;
return TRUE;
}
}
}
break;
case 3:
if(m_CardOpenState.m_bCard3Opened)
{
if(!m_CardCapState.m_bCard3Capturing)
{
if(m_CardProperty3.m_VideoScanMode==FRAME)
nStatus=CGStartSnap(m_CardHandle.m_hCard3, m_CardMemState.m_dwInputMemOffset_Card3, TRUE, 2);
else if(m_CardProperty3.m_VideoScanMode==FIELD)
nStatus=CGStartSnap(m_CardHandle.m_hCard3, m_CardMemState.m_dwInputMemOffset_Card3, TRUE, 4);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard3Capturing=true;
return TRUE;
}
}
}
break;
case 4:
if(m_CardOpenState.m_bCard4Opened)
{
if(!m_CardCapState.m_bCard4Capturing)
{
if(m_CardProperty4.m_VideoScanMode==FRAME)
nStatus=CGStartSnap(m_CardHandle.m_hCard4, m_CardMemState.m_dwInputMemOffset_Card4, TRUE, 2);
else if(m_CardProperty4.m_VideoScanMode==FIELD)
nStatus=CGStartSnap(m_CardHandle.m_hCard4, m_CardMemState.m_dwInputMemOffset_Card4, TRUE, 4);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard4Capturing=true;
return TRUE;
}
}
}
break;
}
return FALSE;
}
/************************************************************************/
/* StopCapture() */
/************************************************************************/
/* */
/*功能描述: 停止图像向静态内存中的动态采集。 */
/* */
/*输入参数: int nCardNo;-卡号,取值范围1-4 */
/* */
/*调用前提: 无 */
/* */
/* 返回值: BOOL; =TRUE -停止成功; */
/* =FALSE -停止失败, */
/* */
/*变量输出: 无 */
/* */
/*其它说明: 无 */
/* */
/************************************************************************/
BOOL CImageManager::StopCapture(int nCardNo)
{
CGSTATUS nStatus;
switch(nCardNo)
{
case 1:
if(m_CardCapState.m_bCard1Capturing)
{
nStatus=CGStopSnap(m_CardHandle.m_hCard1);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard1Capturing=false;
return TRUE;
}
}
break;
case 2:
if(m_CardCapState.m_bCard2Capturing)
{
nStatus=CGStopSnap(m_CardHandle.m_hCard2);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard2Capturing=false;
return TRUE;
}
}
break;
case 3:
if(m_CardCapState.m_bCard3Capturing)
{
nStatus=CGStopSnap(m_CardHandle.m_hCard3);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard3Capturing=false;
return TRUE;
}
}
break;
case 4:
if(m_CardCapState.m_bCard4Capturing)
{
nStatus=CGStopSnap(m_CardHandle.m_hCard4);
if(nStatus==CG_OK)
{
m_CardCapState.m_bCard4Capturing=false;
return TRUE;
}
}
break;
}
return FALSE;
}
/************************************************************************/
/* SetOutImageMem() */
/************************************************************************/
/* */
/*功能描述: 分配用来保存、显示以及处理图像的用户内存。 */
/* */
/*输入参数: int nCardNo;-卡号,取值范围1-4 */
/* */
/*调用前提: - 输出图像尺寸已经设置。 */
/* */
/* 返回值: BOOL; =TRUE -分配成功; */
/* =FALSE -分配失败, */
/* */
/*变量输出: - m_CardMemState.m_gOutputImage_CardX(X=nCardNo) */
/* - m_CardMemState.m_pucOutputImage_CardX(X=nCardNo) */
/* */
/*其它说明: -1) 调用该函数后,确保在程序退出前调用FreeOutImageMem */
/* 释放所需内存; */
/* -2) 内存分配后,可以调用SnapOneToMem(),将图像由静态内存 */
/* 采集至该部分内存。 */
/* -3) 分配内存大小=图像宽度×图像高度×3。 */
/* */
/************************************************************************/
BOOL CImageManager::SetOutImageMem(int nCardNo)
{
DWORD dwDataSize;
switch(nCardNo)
{
case 1:
dwDataSize=m_CardProperty1.m_imageWidth*m_CardProperty1.m_imageWidth*3;
if(m_CardOpenState.m_bCard1Opened)
{
if(m_CardMemState.m_pucOutputImage_Card1==NULL)
{
m_CardMemState.m_gOutputImage_Card1=GlobalAlloc(GHND, dwDataSize);
m_CardMemState.m_pucOutputImage_Card1=(BYTE *)GlobalLock(m_CardMemState.m_gOutputImage_Card1);
return TRUE;
}
else
return FALSE;
}
else
return FALSE;
break;
case 2:
dwDataSize=m_CardProperty2.m_imageWidth*m_CardProperty2.m_imageWidth*3;
if(m_CardOpenState.m_bCard2Opened)
{
if(m_CardMemState.m_pucOutputImage_Card2==NULL)
{
m_CardMemState.m_gOutputImage_Card2=GlobalAlloc(GHND, dwDataSize);
m_CardMemState.m_pucOutputImage_Card2=(BYTE *)GlobalLock(m_CardMemState.m_gOutputImage_Card2);
return TRUE;
}
else
return FALSE;
}
else
return FALSE;
break;
case 3:
dwDataSize=m_CardProperty3.m_imageWidth*m_CardProperty3.m_imageWidth*3;
if(m_CardOpenState.m_bCard3Opened)
{
if(m_CardMemState.m_pucOutputImage_Card3==NULL)
{
m_CardMemState.m_gOutputImage_Card3=GlobalAlloc(GHND, dwDataSize);
m_CardMemState.m_pucOutputImage_Card3=(BYTE *)GlobalLock(m_CardMemState.m_gOutputImage_Card3);
return TRUE;
}
else
return FALSE;
}
else
return FALSE;
break;
case 4:
dwDataSize=m_CardProperty4.m_imageWidth*m_CardProperty4.m_imageWidth*3;
if(m_CardOpenState.m_bCard4Opened)
{
if(m_CardMemState.m_pucOutputImage_Card4==NULL)
{
m_CardMemState.m_gOutputImage_Card4=GlobalAlloc(GHND, dwDataSize);
m_CardMemState.m_pucOutputImage_Card4=(BYTE *)GlobalLock(m_CardMemState.m_gOutputImage_Card4);
return TRUE;
}
else
return FALSE;
}
else
return FALSE;
break;
}
return FALSE;
}
/************************************************************************/
/* FreeOutImageMem() */
/************************************************************************/
/* */
/*功能描述: 释放用来保存、显示以及处理图像的用户内存。 */
/* */
/*输入参数: int nCardNo;-卡号,取值范围1-4 */
/* */
/*调用前提: 无 */
/* */
/* 返回值: BOOL; =TRUE -释放成功; */
/* =FALSE -释放失败, */
/* */
/*变量输出: - m_CardMemState.m_gOutputImage_CardX(X=nCardNo)=NULL */
/* - m_CardMemState.m_pucOutputImage_CardX(X=nCardNo)=NULL */
/* */
/*其它说明: -1) 与SetOutImageMem成对出现; */
/* -2) 释放后不能再调用函数SnapOneToMem()。 */
/* */
/************************************************************************/
BOOL CImageManager::FreeOutImageMem(int nCardNo)
{
switch(nCardNo)
{
case 1:
if(m_CardMemState.m_pucOutputImage_Card1!=NULL)
{
GlobalUnlock(m_CardMemState.m_gOutputImage_Card1);
GlobalFree(m_CardMemState.m_gOutputImage_Card1);
m_CardMemState.m_pucOutputImage_Card1=NULL;
m_CardMemState.m_gOutputImage_Card1=NULL;
}
break;
case 2:
if(m_CardMemState.m_pucOutputImage_Card2!=NULL)
{
GlobalUnlock(m_CardMemState.m_gOutputImage_Card2);
GlobalFree(m_CardMemState.m_gOutputImage_Card2);
m_CardMemState.m_pucOutputImage_Card2=NULL;
m_CardMemState.m_gOutputImage_Card2=NULL;
}
break;
case 3:
if(m_CardMemState.m_pucOutputImage_Card3!=NULL)
{
GlobalUnlock(m_CardMemState.m_gOutputImage_Card3);
GlobalFree(m_CardMemState.m_gOutputImage_Card3);
m_CardMemState.m_pucOutputImage_Card3=NULL;
m_CardMemState.m_gOutputImage_Card3=NULL;
}
break;
case 4:
if(m_CardMemState.m_pucOutputImage_Card4!=NULL)
{
GlobalUnlock(m_CardMemState.m_gOutputImage_Card4);
GlobalFree(m_CardMemState.m_gOutputImage_Card4);
m_CardMemState.m_pucOutputImage_Card4=NULL;
m_CardMemState.m_gOutputImage_Card4=NULL;
}
break;
}
return TRUE;
}
/************************************************************************/
/* SnapOneToMem() */
/************************************************************************/
/* */
/*功能描述: 从相应的静态内存中采集一帧图像至用户内存。 */
/* */
/*输入参数: int nCardNo;-卡号,取值范围1-4 */
/* */
/*调用前提: - 1) 打开图像卡,并且正在采集至静态内存,调用BeginCapture;*/
/* - 2) 用户内存已经分配,调用SetOutImageMem; */
/* - 3) nCardNo路输出图像的属性已经配置。 */
/* */
/* 返回值: BOOL; =TRUE -采集成功; */
/* =FALSE -采集失败, */
/* */
/*变量输出: 无 */
/* */
/*其它说明: -1) 将图像由m_CardMemState.m_dwInputMemOffset_CardX */
/* (X=nCardNo)所指定的静态内存位置经转换后保存至 */
/* m_CardMemState.m_pucOutputImage_CardX(X=nCardNo)所指 */
/* 定的用户内存中。 */
/* -2) 输出图像为相应格式的24Bits图像。 */
/* */
/************************************************************************/
BOOL CImageManager::SnapOneToMem(int nCardNo)
{
int nStatus;
HANDLE hHandle;
BYTE *pLineAddr;
DWORD dwMemSize;
int nNum;
switch(nCardNo)
{
case 1:
switch(m_CardProperty1.m_VideoFormat)
{
case RGB888:
dwMemSize=m_CardProperty1.m_imageWidth*m_CardProperty1.m_imageHeight*3;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -