📄 scommtestdlg.cpp
字号:
}
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 + -