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

📄 imagemanager.cpp

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