📄 imagemanager.cpp
字号:
H=480;
else if(nHeight>0)
H=nHeight;
else
return FALSE;
nStatus=CGSetInputWindow(m_CardHandle.m_hCard1,0,0,W,H);
if(nStatus==CG_OK)
return TRUE;
return FALSE;
break;
case 2:
if(!m_CardOpenState.m_bCard2Opened)
return FALSE;
if((m_CardProperty2.m_VideoStandard==PAL)&&(nWidth>768))
W=768;
else if((m_CardProperty2.m_VideoStandard==NTSC)&&(nWidth>640))
W=640;
else if(nWidth>0)
W=nWidth;
else
return FALSE;
if((m_CardProperty2.m_VideoStandard==PAL)&&(nHeight>576))
H=576;
else if((m_CardProperty2.m_VideoStandard==NTSC)&&(nHeight>480))
H=480;
else if(nHeight>0)
H=nHeight;
else
return FALSE;
nStatus=CGSetInputWindow(m_CardHandle.m_hCard2,0,0,W,H);
if(nStatus==CG_OK)
return TRUE;
return FALSE;
break;
case 3:
if(!m_CardOpenState.m_bCard3Opened)
return FALSE;
if((m_CardProperty3.m_VideoStandard==PAL)&&(nWidth>768))
W=768;
else if((m_CardProperty3.m_VideoStandard==NTSC)&&(nWidth>640))
W=640;
else if(nWidth>0)
W=nWidth;
else
return FALSE;
if((m_CardProperty3.m_VideoStandard==PAL)&&(nHeight>576))
H=576;
else if((m_CardProperty3.m_VideoStandard==NTSC)&&(nHeight>480))
H=480;
else if(nHeight>0)
H=nHeight;
else
return FALSE;
nStatus=CGSetInputWindow(m_CardHandle.m_hCard3,0,0,W,H);
if(nStatus==CG_OK)
return TRUE;
return FALSE;
break;
case 4:
if(!m_CardOpenState.m_bCard4Opened)
return FALSE;
if((m_CardProperty4.m_VideoStandard==PAL)&&(nWidth>768))
W=768;
else if((m_CardProperty4.m_VideoStandard==NTSC)&&(nWidth>640))
W=640;
else if(nWidth>0)
W=nWidth;
else
return FALSE;
if((m_CardProperty4.m_VideoStandard==PAL)&&(nHeight>576))
H=576;
else if((m_CardProperty4.m_VideoStandard==NTSC)&&(nHeight>480))
H=480;
else if(nHeight>0)
H=nHeight;
else
return FALSE;
nStatus=CGSetInputWindow(m_CardHandle.m_hCard4,0,0,W,H);
if(nStatus==CG_OK)
return TRUE;
return FALSE;
break;
default:
return FALSE;
}
}
/************************************************************************/
/* AllocateInputMemForCards() */
/************************************************************************/
/* */
/*功能描述: 根据4路卡的输出图像尺寸为其配置输入图像的静态内存。 */
/* */
/*输入参数: 无 */
/* */
/*调用前提: - 四路图像输出尺寸已经设置; */
/* */
/* 返回值: BOOL; =TRUE -配置成功; */
/* =FALSE -配置失败,主要原因是要设置的静态内 */
/* 存大于系统为其所分配的静态内存; */
/* */
/*变量输出: -m_CardMemState中每路图像卡的静态内存偏移量和大小 */
/* */
/*其它说明; -1) 该函数同时为四路图像卡指定静态内存空间; */
/* -2) BeginCapture()函数需要根据所分配的内存采集图像,因 */
/* 此,调用该函数前应调用StopCaputre()中止内存采集过程。*/
/* -3) 该函数被SetOutImageSize()调用; */
/* */
/************************************************************************/
BOOL CImageManager::AllocateInputMemForCards()
{
DWORD dwTotal;
DWORD dwPages;
m_CardMemState.m_dwInputMemSize_Card1=m_CardProperty1.m_imageWidth*m_CardProperty1.m_imageWidth*8;
m_CardMemState.m_dwInputMemSize_Card2=m_CardProperty2.m_imageWidth*m_CardProperty2.m_imageWidth*8;
m_CardMemState.m_dwInputMemSize_Card3=m_CardProperty3.m_imageWidth*m_CardProperty3.m_imageWidth*8;
m_CardMemState.m_dwInputMemSize_Card4=m_CardProperty4.m_imageWidth*m_CardProperty4.m_imageWidth*8;
dwTotal=m_CardMemState.m_dwInputMemSize_Card1+m_CardMemState.m_dwInputMemSize_Card2+
m_CardMemState.m_dwInputMemSize_Card3+m_CardMemState.m_dwInputMemSize_Card4;
CGGetStaticMem(&dwPages);
dwPages=dwPages*4000;
if(dwTotal>dwPages)
{
m_CardMemState.m_dwInputMemSize_Card1=0;
m_CardMemState.m_dwInputMemSize_Card2=0;
m_CardMemState.m_dwInputMemSize_Card3=0;
m_CardMemState.m_dwInputMemSize_Card4=0;
m_CardMemState.m_dwInputMemOffset_Card1=0;
m_CardMemState.m_dwInputMemOffset_Card2=0;
m_CardMemState.m_dwInputMemOffset_Card3=0;
m_CardMemState.m_dwInputMemOffset_Card4=0;
return FALSE;
}
else
{
m_CardMemState.m_dwInputMemOffset_Card1=0;
m_CardMemState.m_dwInputMemOffset_Card2=m_CardMemState.m_dwInputMemSize_Card1;
m_CardMemState.m_dwInputMemOffset_Card3=m_CardMemState.m_dwInputMemSize_Card1+m_CardMemState.m_dwInputMemSize_Card2;
m_CardMemState.m_dwInputMemOffset_Card4=m_CardMemState.m_dwInputMemSize_Card1+m_CardMemState.m_dwInputMemSize_Card2+m_CardMemState.m_dwInputMemSize_Card3;
return TRUE;
}
}
/************************************************************************/
/* SetOutImageSize() */
/************************************************************************/
/* */
/*功能描述: - 1) 设置各路图像的输出尺寸; */
/* 2) 调用AllocateInputMemForCards()为各路图像指定静态内存 */
/* */
/*输入参数: int nWidthInPixelsCard1 -第一路图像宽度,单位:像素; */
/* int nHeightInPixelsCard1 -第一路图像高度,单位:像素; */
/* int nWidthInPixelsCard2 -第二路图像高度,单位:像素; */
/* int nHeighInPixelsCard2 -第二路图像高度,单位:像素; */
/* int nWidthInPixelsCard3 -第三路图像高度,单位:像素; */
/* int nHeightInPixelsCard3 -第三路图像高度,单位:像素; */
/* int nWidthInPixelsCard4 -第四路图像高度,单位:像素; */
/* int nHeightInPixelsCard4 -第四路图像高度,单位:像素; */
/* */
/*调用前提: - 1) 打开图像卡; */
/* - 2) 如果图像正在采集,调用StopCapture()停止采集过程; */
/* */
/* 返回值: 无 */
/* */
/*变量输出: -1) m_CardProperty中每路图像卡的输出图像尺寸变量; */
/* -2) m_CardMemState中每路图像卡的静态内存偏移量和大小; */
/* */
/*其它说明; 无 */
/* */
/************************************************************************/
void CImageManager::SetOutImageSize(int nWidthInPixelsCard1,int nHeightInPixelsCard1,
int nWidthInPixelsCard2,int nHeightInPixelsCard2,
int nWidthInPixelsCard3,int nHeightInPixelsCard3,
int nWidthInPixelsCard4,int nHeightInPixelsCard4)
{
m_CardProperty1.m_imageWidth=nWidthInPixelsCard1;
m_CardProperty1.m_imageHeight=nHeightInPixelsCard1;
m_CardProperty2.m_imageWidth=nWidthInPixelsCard2;
m_CardProperty2.m_imageHeight=nHeightInPixelsCard2;
m_CardProperty3.m_imageWidth=nWidthInPixelsCard3;
m_CardProperty3.m_imageHeight=nHeightInPixelsCard3;
m_CardProperty4.m_imageWidth=nWidthInPixelsCard4;
m_CardProperty4.m_imageHeight=nHeightInPixelsCard4;
CGSetOutputWindow(m_CardHandle.m_hCard1,0,0,m_CardProperty1.m_imageWidth,m_CardProperty1.m_imageHeight);
CGSetOutputWindow(m_CardHandle.m_hCard2,0,0,m_CardProperty2.m_imageWidth,m_CardProperty2.m_imageHeight);
CGSetOutputWindow(m_CardHandle.m_hCard3,0,0,m_CardProperty3.m_imageWidth,m_CardProperty3.m_imageHeight);
CGSetOutputWindow(m_CardHandle.m_hCard4,0,0,m_CardProperty4.m_imageWidth,m_CardProperty4.m_imageHeight);
AllocateInputMemForCards();
}
/************************************************************************/
/* UpdateCardAttribute() */
/************************************************************************/
/* */
/*功能描述: 更新输出图像属性 */
/* */
/*输入参数: int nCardNo;-卡号,取值范围1-4 */
/* ATTR_TYPE nType; = ATTR_SOURCE_TYPE -视频源 */
/* = ATTR_VIDEO_FORMAT -图像格式 */
/* = ATTR_VIDEO_STANDARD -制式标准 */
/* = ATTR_VIDEO_SCANMODE -扫描方式 */
/* = ATTR_VIDEO_GAMMACORR -Gamma校正 */
/* = ATTR_VIDEO_MIRROR -图像镜像 */
/* = ATTR_VIDEO_CRYOSC -晶振选择 */
/* = ATTR_VIDEO_BRIGHTNESS -亮度 */
/* = ATTR_VIDEO_CONTRAST -对比度 */
/* = ATTR_VIDEO_HUE -色调 */
/* = ATTR_VIDEO_SATURATION -饱和度 */
/* = ATTR_ALL -所有属性 */
/* */
/*调用前提: - 1) 打开图像卡; */
/* - 2) 如果对图像格式、制式标准、扫描方式和所有属性进行设 */
/* 置,如果图像正在采集,调用StopCapture()停止采集过程 */
/* - 3) 在调用该函数前,首先将m_CardProperty中的相应属性变 */
/* 量设置为目标值。 */
/* */
/* 返回值: BOOL; =TRUE -更新成功; */
/* =FALSE -更新失败, */
/* */
/*变量输出: 无 */
/* */
/*其它说明; -1) 需要停止采集才能更新的属性:图像格式、制式标准、扫描 */
/* 方式(包括nType=ATTR_ALL); */
/* -2) 其它属性可以在采集的同时进行更新; */
/* -3) 镜像不支持,更新不起作用; */
/* -4) Gamma校正没有实现,更新不起作用。 */
/* */
/************************************************************************/
BOOL CImageManager::UpdateCardAttribute(int nCardNo, ATTR_TYPE nType)
{
HCG hHandle;
CARD_PROPERTY *pProperty;
CGSTATUS nStatus;
switch(nCardNo)
{
case 1:
hHandle=m_CardHandle.m_hCard1;
pProperty=&m_CardProperty1;
break;
case 2:
hHandle=m_CardHandle.m_hCard2;
pProperty=&m_CardProperty2;
break;
case 3:
hHandle=m_CardHandle.m_hCard3;
pProperty=&m_CardProperty3;
break;
case 4:
hHandle=m_CardHandle.m_hCard4;
pProperty=&m_CardProperty4;
break;
default:
return FALSE;
}
if(hHandle==NULL)
return FALSE;
switch(nType)
{
case ATTR_SOURCE_TYPE:
nStatus=CGSetVideoSource(hHandle,pProperty->m_VideoSource);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_FORMAT:
nStatus=CGSetVideoFormat(hHandle,pProperty->m_VideoFormat);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_STANDARD:
if(pProperty->m_VideoStandard==PAL)
CGSetInputWindow(hHandle,0,0,768,576);
else if(pProperty->m_VideoStandard==NTSC)
CGSetInputWindow(hHandle,0,0,640,480);
nStatus=CGSetVideoStandard(hHandle,pProperty->m_VideoStandard);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_SCANMODE:
nStatus=CGSetScanMode(hHandle,pProperty->m_VideoScanMode);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_GAMMACORR:
//CGSetGammaCorrCoef();
//CGGammaCorrControl(hHandle,pProperty->m_VideoGammaCorr);
break;
case ATTR_VIDEO_MIRROR:
if(pProperty->m_bMirrorEnabled)
nStatus=CGEnableVideoMirror(hHandle,pProperty->m_VideoMirror,TRUE);
else
nStatus=CGEnableVideoMirror(hHandle,pProperty->m_VideoMirror,FALSE);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_CRYOSC:
nStatus=CGSelectCryOSC(hHandle,pProperty->m_CryOsc);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_BRIGHTNESS:
nStatus=CGAdjustVideo(hHandle,BRIGHTNESS,pProperty->m_byteBrightness);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_CONTRAST:
nStatus=CGAdjustVideo(hHandle,CONTRAST,pProperty->m_byteContrast);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_HUE:
nStatus=CGAdjustVideo(hHandle,HUE,pProperty->m_byteHue);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_VIDEO_SATURATION:
nStatus=CGAdjustVideo(hHandle,SATURATION,pProperty->m_byteSaturation);
if(nStatus==CG_OK)
return TRUE;
else
return FALSE;
break;
case ATTR_ALL:
CGSetVideoSource(hHandle,pProperty->m_VideoSource);
CGSetOutputWindow(hHandle,0,0,pProperty->m_imageWidth,pProperty->m_imageHeight);
CGSetVideoFormat(hHandle,pProperty->m_VideoFormat);
CGSetVideoStandard(hHandle,pProperty->m_VideoStandard);
CGSetScanMode(hHandle,pProperty->m_VideoScanMode);
if(pProperty->m_bMirrorEnabled)
CGEnableVideoMirror(hHandle,pProperty->m_VideoMirror,TRUE);
else
CGEnableVideoMirror(hHandle,pProperty->m_VideoMirror,FALSE);
CGSelectCryOSC(hHandle,pProperty->m_CryOsc);
CGAdjustVideo(hHandle,BRIGHTNESS,pProperty->m_byteBrightness);
CGAdjustVideo(hHandle,CONTRAST,pProperty->m_byteContrast);
CGAdjustVideo(hHandle,HUE,pProperty->m_byteHue);
CGAdjustVideo(hHandle,SATURATION,pProperty->m_byteSaturation);
break;
default:
break;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -