⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagemanager.cpp

📁 智能小车导航
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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 + -