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

📄 imagemanager.cpp

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