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

📄 scommtestdlg.cpp

📁 摄像头上位机
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	UpdateData(FALSE);//更新编辑框内容
}

*/

//DEL void CSCommTestDlg::OnButtonManualsend() 
//DEL {
//DEL 	// TODO: Add your control notification handler code here
//DEL 	UpdateData(TRUE); //读取编辑框内容
//DEL 	m_iIndex=0;
//DEL 	m_iRXLength=0;
//DEL 	m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据
//DEL // 	if(m_iRXLength==102454)
//DEL // 	{
//DEL // 		CClientDC dc(GetDlgItem(IDC_STATIC_DISPLAY));
//DEL // 		
//DEL // 		for(int i=0;i<288;i++)
//DEL // 		{
//DEL // 			for(int j=0;j<352;j++)
//DEL // 			{	
//DEL // 				int index = i*352+j;
//DEL // 				dc.SetPixel(j,287-i,RGB(m_cRaw[index+1078],m_cRaw[index+1078],m_cRaw[index+1078]));
//DEL // 			}
//DEL // 		}
//DEL // 	}
//DEL 	
//DEL }

//DEL void CSCommTestDlg::OnButtonDis() 
//DEL {
//DEL 	// TODO: Add your control notification handler code here
//DEL 	CClientDC dc(GetDlgItem(IDC_STATIC_DISPLAY));
//DEL 
//DEL 	for(int i=0;i<288;i++)
//DEL 	{
//DEL 		for(int j=0;j<352;j++)
//DEL 		{	
//DEL 			int index = i*352+j;
//DEL 			dc.SetPixel(j,287-i,RGB(m_cRaw[index+1078],m_cRaw[index+1078],m_cRaw[index+1078]));
//DEL 		}
//DEL 	}
//DEL }
UINT CSCommTestDlg::DisThread(LPVOID pParam)
{
	 
	 //CClientDC dc((CWnd*)pParam);
	 CClientDC dc(  ((CSCommTestDlg*)pParam)->GetDlgItem(IDC_STATIC_DISPLAY) );
	 if(((CSCommTestDlg*)pParam)->m_iRXLength == 102454)
	 {
		 for(int i=0;i<288;i++)
		 {
			 for(int j=0;j<352;j++)
			 {	
				 int index = i*352+j;
				 dc.SetPixel(j,287-i,RGB(((CSCommTestDlg*)pParam)->m_cRaw[index+1078],((CSCommTestDlg*)pParam)->m_cRaw[index+1078],
					 ((CSCommTestDlg*)pParam)->m_cRaw[index+1078]));
			 }
		 }
		 ((CSCommTestDlg*)pParam)->m_iRXLength=0;
	 }
	 //((CSCommTestDlg*)pParam)->MessageBox("test");
     return 0;
}

void CSCommTestDlg::bayer2rgb24(unsigned char *dst, unsigned char *src, long WIDTH, long HEIGHT)
{
    long int i;
    unsigned char *rawpt, *scanpt;
    long int size;
	
    rawpt = src;
    scanpt = dst;
    size = WIDTH*HEIGHT;
	
    for ( i = 0; i < size; i++ ) 
    {
		if ( (i/WIDTH) % 2 == 0 )      //奇数行
		{
			if ( (i % 2) == 0 )      //奇数列
			{
				/* B */
				if ( (i > WIDTH) && ((i % WIDTH) > 0) ) 
				{
					*scanpt++ = ((long int)*(rawpt-WIDTH-1)+(long int)*(rawpt-WIDTH+1)+
						(long int)*(rawpt+WIDTH-1)+(long int)*(rawpt+WIDTH+1))/4;	/* R */
					*scanpt++ = ((long int)*(rawpt-1)+(long int)*(rawpt+1)+
						(long int)*(rawpt+WIDTH)+(long int)*(rawpt-WIDTH))/4;	/* G */
					*scanpt++ = *rawpt;					/* B */
				} 
				else       /* first line or left column */
				{
					
					*scanpt++ = *(rawpt+WIDTH+1);		/* R */
					*scanpt++ = ((long int)*(rawpt+1)+(long int)*(rawpt+WIDTH))/2;	/* G */
					*scanpt++ = *rawpt;				/* B */
				}
			} 
			else 
			{
				/* (B)G */
				if ( (i > WIDTH) && ((i % WIDTH) < (WIDTH-1)) ) 
				{
					*scanpt++ = ((long int)*(rawpt+WIDTH)+(long int)*(rawpt-WIDTH))/2;	/* R */
					*scanpt++ = *rawpt;					/* G */
					*scanpt++ = ((long int)*(rawpt-1)+(long int)*(rawpt+1))/2;		/* B */
				} 
				else /* first line or right column */
				{
					
					*scanpt++ = *(rawpt+WIDTH);	/* R */
					*scanpt++ = *rawpt;		/* G */
					*scanpt++ = *(rawpt-1);	/* B */
				}
			}
		} 
		else    //偶数行
		{
	           if ( (i % 2) == 0 )  //奇数列
			   {
				   /* G(R) */
				   if ( (i < (WIDTH*(HEIGHT-1))) && ((i % WIDTH) > 0) ) 
				   {
					   *scanpt++ = ((long int)*(rawpt-1)+(long int)*(rawpt+1))/2;		/* R */
					   *scanpt++ = *rawpt;					/* G */
					   *scanpt++ = ((long int)*(rawpt+WIDTH)+(long int)*(rawpt-WIDTH))/2;	/* B */
				   } 
				   else 
				   {
					   /* bottom line or left column */
					   *scanpt++ = *(rawpt+1);		/* R */
					   *scanpt++ = *rawpt;			/* G */
					   *scanpt++ = *(rawpt-WIDTH);		/* B */
				   }
			   } 
			   else 
			   {
				   /* R */
				   if ( i < (WIDTH*(HEIGHT-1)) && ((i % WIDTH) < (WIDTH-1)) ) 
				   {
					   *scanpt++ = *rawpt;					/* R */
					   *scanpt++ = ((long int)*(rawpt-1)+(long int)*(rawpt+1)+
						   (long int)*(rawpt-WIDTH)+(long int)*(rawpt+WIDTH))/4;	/* G */
					   *scanpt++ = ((long int)*(rawpt-WIDTH-1)+(long int)*(rawpt-WIDTH+1)+
						   (long int)*(rawpt+WIDTH-1)+(long int)*(rawpt+WIDTH+1))/4;	/* B */
				   } else {
					   /* bottom line or right column */
					   *scanpt++ = *rawpt;				/* R */
					   *scanpt++ = ((long int)*(rawpt-1)+(long int)*(rawpt-WIDTH))/2;	/* G */
					   *scanpt++ = *(rawpt-WIDTH-1);		/* B */
				   }
			   }
		}
		rawpt++;
    }
}

void CSCommTestDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	//if(m_ctrlComm.GetPortOpen())
	//m_ctrlComm.SetPortOpen(FALSE);
// 	if(m_iRXLength!=0&&m_iRXLength!=308278)
// 	{
// 		MessageBox("等待串口数据发送完毕");
// 		return;
// 	}
	m_ctrlComm.SetPortOpen(FALSE);
	delete []m_cRaw;
	delete []m_cRGB;
	delete []m_inforheader;
	//delete []m_pDib;
	CDialog::OnClose();
}

void CSCommTestDlg::OnCustomdrawSliderAgcgain(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_iAgcGain = m_SliderAgcGain.GetPos();
	UpdateData(false);
	*pResult = 0;
}

void CSCommTestDlg::OnButtonRegister() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_ctrlComm.SetOutput(COleVariant("R"));//发送数据
	COleVariant val;
	CByteArray byteout;
	byteout.Add(m_iAgcGain);
	byteout.Add(m_bBlueGain);
	byteout.Add(m_bRedGain);
	byteout.Add(m_bSaturation);
	byteout.Add(m_bBrightness);
	byteout.Add(m_bBlueWB);
	byteout.Add(m_bRedWB);
	val=COleVariant(byteout);
	m_ctrlComm.SetOutput(val);
	UpdateData(false);
}

void CSCommTestDlg::OnCustomdrawSliderBluegain(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_bBlueGain = m_SliderBlueGain.GetPos();
	UpdateData(false);
	*pResult = 0;
}

void CSCommTestDlg::OnCustomdrawSliderRedgain(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_bRedGain = m_SliderRedGain.GetPos();
	UpdateData(false);
	*pResult = 0;
}

void CSCommTestDlg::OnCustomdrawSliderBrightness(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_bBrightness = m_SliderBrightness.GetPos();
	UpdateData(false);	
	*pResult = 0;
}

void CSCommTestDlg::OnCustomdrawSliderBluewb(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_bBlueWB = m_SliderBlueWB.GetPos();
	UpdateData(false);		
	*pResult = 0;
}

void CSCommTestDlg::OnCustomdrawSliderRedwb(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_bRedWB = m_SliderRedWB.GetPos();
	UpdateData(false);		
	*pResult = 0;
}
void CSCommTestDlg::OnCustomdrawSliderSaturation(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	m_bSaturation = m_SliderSaturation.GetPos();
	UpdateData(false);		
	*pResult = 0;
}
void CSCommTestDlg::createinfoheader(unsigned char *infoheader, int heigh, int width)
{
 unsigned char *p;
  char heighlow;
  char heighhigh;
  char widthlow;
  char widthhigh;
  
  heighlow = heigh & 0x00FF;
  heighhigh = (heigh & 0xFF00)>>8;
  widthlow = width & 0x00FF;
  widthhigh = (width & 0xFF00)>>8;
  
  p = infoheader;
  
  //4 Bytes -- Size of InfoHeader =40 
  *p = 40;
  p++; 
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //4 Bytes -- specifies the width of the image, in pixels.
  *p = widthlow;
  p++; 
  *p = widthhigh;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //4 Bytes -- specifies the heigth of the image, in pixels.
  *p = heighlow;
  p++;
  *p = heighhigh;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //2 Bytes -- Number of planes of the image
  *p = 1;
  p++;
  *p = 0;
  p++;
  //2 Bytes Bits per Pixel  -- In our case 8.
  *p = 24;  //8
  p++;
  *p = 0;
  p++;
  //4 bytes -- Type of Compression 0 = BI_RGB   no compression   
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //4 bytes -- ImageSize  (compressed) It is valid to set this =0 
  *p = (heigh*width*3) & 0x000000FF;
  p++;
  *p = ((heigh*width*3) & 0x0000FF00) >>8;
  p++;
  *p = ((heigh*width*3) & 0x00FF0000) >>16;
  p++;
  *p = ((heigh*width*3) & 0xFF000000) >>24;
  p++;
  //XpixelsPerM 4 bytes horizontal resolution: Pixels/meter 
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //YpixelsPerM 4 bytes vertical resolution: Pixels/meter 
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //ColorsUsed 4 bytes Number of actually used colors =256
  *p = 0;
  p++;
  *p = 0;//1;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  //ColorsImportant 4 bytes Number of important colors  0 = all 
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
  *p = 0;
  p++;
}

void CSCommTestDlg::OnButtonSave() 
{
	// TODO: Add your control notification handler code here
	CString szFileName;
	if (m_bDisplay==true) 
	{
		CFileDialog dlg(FALSE, _T("bmp"), _T("Temp.bmp"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Bitmap Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"), this);
		if(dlg.DoModal() == IDOK)
		{
			szFileName = dlg.GetPathName();
			HANDLE hf = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL,CREATE_ALWAYS, NULL, NULL);
			if( hf == INVALID_HANDLE_VALUE ) return;
			// 写位图文件头 
			BITMAPFILEHEADER bfh;
			memset(&bfh, 0, sizeof(bfh));
			bfh.bfType = 'MB';      //文件类型
			bfh.bfSize = 921654;//nFileLen; //bmp文件大小
			bfh.bfReserved1 = 0;
			bfh.bfReserved2 = 0;
			bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + /*NumColor*/0 * sizeof(RGBQUAD); 
			DWORD dwWritten = 0;
			WriteFile(hf, &bfh, sizeof(bfh), &dwWritten, NULL);
			
			// 写位图信息头
			BITMAPINFOHEADER bih;
			memset(&bih, 0, sizeof(bih));
			bih.biSize = sizeof(bih);
			bih.biWidth = 640;//lWidth;
			bih.biHeight = 480;//lHeight;
			bih.biPlanes = 1;
			bih.biBitCount = 24;//lBitCount;
			bih.biCompression = 0;
			bih.biSizeImage = bih.biWidth * bih.biHeight * /*lBitCount*/24 / 8;
			bih.biXPelsPerMeter = 3780;
			bih.biYPelsPerMeter = 3780;
			bih.biClrUsed = 0;
			bih.biClrImportant = 0;
			WriteFile(hf, &bih, sizeof(bih), &dwWritten, NULL);
			
			// 写位图数据
			//unsigned char *pDibBuffer;
            //pDibBuffer = m_pDib + sizeof(BITMAPINFOHEADER);
			DWORD lDibSize =  921654 - sizeof(BITMAPFILEHEADER) - sizeof(BITMAPINFOHEADER);
			WriteFile(hf, m_cRGB, lDibSize, &dwWritten, NULL);	
			CloseHandle(hf);	
		}
	}
}

void CSCommTestDlg::OnButtonGetframe() 
{
	// TODO: Add your control notification handler code here
	m_iIndex=0;
	m_iRXLength=0;
	m_ctrlComm.SetOutput(COleVariant("G"));//发送数据

}



void CSCommTestDlg::OnButtonCommadnsend() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE); //读取编辑框内容
	m_iIndex=0;
	m_iRXLength=0;
 	m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -