diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index 63beaa3..d84739a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -381,22 +381,22 @@ BEGIN CONTROL "",IDC_STATIC_SDK3000_PICTURE,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,228,296,68,16 END -IDD_SO7_VIDEOCARD_SV2000E DIALOGEX 0, 0, 488, 316 +IDD_SO7_VIDEOCARD_SV2000E DIALOGEX 0, 0, 910, 317 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "SV2000视频卡" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - CONTROL "彩色图像",IDC_RADIO_SV2000E_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,435,37,48,10 - CONTROL "黑白图像",IDC_RADIO_SV2000E_GRAY,"Button",BS_AUTORADIOBUTTON,435,58,48,10 - CONTROL "垂直镜像",IDC_CHECK_SV2000E_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,435,85,48,10 - PUSHBUTTON "保存图片",IDC_BUTTON_SV2000E_SAVEFILE,435,115,50,14 - DEFPUSHBUTTON "开始",IDOK,372,298,50,14 - PUSHBUTTON "退出",IDCANCEL,435,298,50,14 - GROUPBOX "通道选择",IDC_STATIC,439,140,42,61 - CONTROL "1",IDC_RADIO_SV2000E_CHANNEL1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,450,160,23,10 - CONTROL "2",IDC_RADIO_SV2000E_CHANNEL2,"Button",BS_AUTORADIOBUTTON,450,182,26,10 - GROUPBOX "设备选择",IDC_STATIC,438,207,42,61 - COMBOBOX IDC_COMBO_SV2000E_SELECT_DEV_NUMBER,443,222,31,35,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CONTROL "彩色图像",IDC_RADIO_SV2000E_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,861,38,48,10 + CONTROL "黑白图像",IDC_RADIO_SV2000E_GRAY,"Button",BS_AUTORADIOBUTTON,861,59,48,10 + CONTROL "垂直镜像",IDC_CHECK_SV2000E_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,861,86,48,10 + PUSHBUTTON "保存图片",IDC_BUTTON_SV2000E_SAVEFILE,859,116,50,14 + DEFPUSHBUTTON "开始",IDOK,793,300,50,14 + PUSHBUTTON "退出",IDCANCEL,854,300,50,14 + GROUPBOX "通道选择",IDC_STATIC,864,142,42,61 + CONTROL "1",IDC_RADIO_SV2000E_CHANNEL1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,876,161,23,10 + CONTROL "2",IDC_RADIO_SV2000E_CHANNEL2,"Button",BS_AUTORADIOBUTTON,876,183,26,10 + GROUPBOX "设备选择",IDC_STATIC,863,208,42,61 + COMBOBOX IDC_COMBO_SV2000E_SELECT_DEV_NUMBER,868,223,31,35,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP END IDD_SO7_UTIL_SETUP_CONFIGURE DIALOGEX 0, 0, 476, 451 @@ -597,8 +597,10 @@ BEGIN IDD_SO7_VIDEOCARD_SV2000E, DIALOG BEGIN LEFTMARGIN, 1 - RIGHTMARGIN, 485 + RIGHTMARGIN, 909 VERTGUIDE, 435 + VERTGUIDE, 853 + BOTTOMMARGIN, 314 END IDD_SO7_UTIL_SETUP_CONFIGURE, DIALOG diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp index cf6900d..4eb6ddf 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp @@ -105,7 +105,8 @@ void CVideocard_SV2000E::OnBnClickedOk() void CVideocard_SV2000E::OnBnClickedCancel() { KillTimer(1); - UnloadVideocard(); + UnloadVideocard(m_device); + UnloadVideocard(m_device_Nav); DXUninitialize(); CDialog::OnCancel(); } @@ -153,24 +154,66 @@ void CVideocard_SV2000E::OnBnClickedButtonSv2000eSavefile() } //=================================================== void CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel1() -{ - UnloadVideocard(); +{ m_Channel=1; - LoadVideocard(); + if (m_OpenDevNo==0) + { + CloseDevice(m_device); + CloseDevice(m_device_Nav); + OpenDevice(0,m_device); + } + else if (m_OpenDevNo==1) + { + CloseDevice(m_device); + CloseDevice(m_device_Nav); + OpenDevice(1,m_device_Nav); + } + else + { + UnloadVideocard(m_device); + UnloadVideocard(m_device_Nav); + LoadVideocard(); + } } //=================================================== void CVideocard_SV2000E::OnBnClickedRadioSv2000eChannel2() { - UnloadVideocard(); m_Channel=2; - LoadVideocard(); + if (m_OpenDevNo==0) + { + CloseDevice(m_device); + CloseDevice(m_device_Nav); + OpenDevice(0,m_device); + } + else if (m_OpenDevNo==1) + { + CloseDevice(m_device); + CloseDevice(m_device_Nav); + OpenDevice(1,m_device_Nav); + } + else + { + UnloadVideocard(m_device); + UnloadVideocard(m_device_Nav); + LoadVideocard(); + } } //=================================================== void CVideocard_SV2000E::OnCbnSelchangeComboSv2000eSelectDevNumber() { m_OpenDevNo=((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->GetCurSel(); - CloseDevice(); - OpenDevice(m_OpenDevNo); + if (m_OpenDevNo==2)//both + { + CloseDevice(m_device); + OpenDevice(0,m_device); + OpenDevice(1,m_device_Nav); + } + else + { + CloseDevice(m_device); + CloseDevice(m_device_Nav); + OpenDevice(m_OpenDevNo,m_device); + } } //======================================= BOOL CVideocard_SV2000E::LoadVideocard() @@ -191,9 +234,13 @@ BOOL CVideocard_SV2000E::LoadVideocard() csTmp.Format(_T("%d"),i+1); ((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->InsertString(i,csTmp); } + if (m_nDevNum>1) + { + ((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->InsertString(m_nDevNum,_T("Both")); + } ((CComboBox *)GetDlgItem(IDC_COMBO_SV2000E_SELECT_DEV_NUMBER))->SetCurSel(0); m_OpenDevNo=0; - OpenDevice(m_OpenDevNo); + OpenDevice(m_OpenDevNo,m_device); if((bInitSdk!=0)||(m_nDevNum<1)||(m_device==NULL)) { ::AfxMessageBox(_T("SV2000E卡初始化失败!")); @@ -203,48 +250,56 @@ BOOL CVideocard_SV2000E::LoadVideocard() return TRUE; } //======================================= -void CVideocard_SV2000E::OpenDevice(unsigned int _DevNo) +void CVideocard_SV2000E::OpenDevice(unsigned int _DevNo,device_handle &_OpenedDevice) { - m_device= DXOpenDevice(_DevNo, NULL); + _OpenedDevice= DXOpenDevice(_DevNo, NULL); unsigned standard(VideoStandard_PAL_D); unsigned colorspace(cs_yuy2);//cs_rgb24 unsigned width(640);//640 unsigned height(480);//480 float framerate(25); - m_status=DXSetVideoPara(m_device,standard,colorspace,width,height,framerate); + m_status=DXSetVideoPara(_OpenedDevice,standard,colorspace,width,height,framerate); - DXDeviceRun(m_device); + DXDeviceRun(_OpenedDevice); m_dwCard=2; - m_status=DXSetVideoSource(m_device, m_Channel); + m_status=DXSetVideoSource(_OpenedDevice, m_Channel); //==============================消除隔行========================================= - m_status=DXSetVideoPara(m_device,standard,colorspace,width,height,framerate); + m_status=DXSetVideoPara(_OpenedDevice,standard,colorspace,width,height,framerate); //================================================================================ - m_status=DXSetDisplayPara( m_device, BRIGHTNESS, 5000,2); - m_status=DXSetDisplayPara( m_device, SATURATION, 5000,2); - m_status=DXSetDisplayPara( m_device, CONTRAST, 5000,2); - m_status=DXSetDisplayPara( m_device, HUE, 5000,2); - m_status=DXSetDisplayPara( m_device, SHARPNESS, 4,2); + m_status=DXSetDisplayPara( _OpenedDevice, BRIGHTNESS, 5000,2); + m_status=DXSetDisplayPara( _OpenedDevice, SATURATION, 5000,2); + m_status=DXSetDisplayPara( _OpenedDevice, CONTRAST, 5000,2); + m_status=DXSetDisplayPara( _OpenedDevice, HUE, 5000,2); + m_status=DXSetDisplayPara( _OpenedDevice, SHARPNESS, 4,2); + if (_DevNo==0) + { + m_status=DXSetRawVideoCallback(_OpenedDevice, SVAPrcVidCapCallBack, this); + m_status=DXStartRawVideoCallback(_OpenedDevice,SVAPrcVidCapCallBack,this); + } + else + { + m_status=DXSetRawVideoCallback(_OpenedDevice, SVAPrcVidCapCallBackNav, this); + m_status=DXStartRawVideoCallback(_OpenedDevice,SVAPrcVidCapCallBackNav,this); + } - m_status=DXSetRawVideoCallback(m_device, SVAPrcVidCapCallBack, this); - m_status=DXStartRawVideoCallback(m_device,SVAPrcVidCapCallBack,this); }; //======================================= -void CVideocard_SV2000E::CloseDevice() +void CVideocard_SV2000E::CloseDevice(device_handle _Device) { - UnloadVideocard(); + UnloadVideocard(_Device); }; //======================================= -BOOL CVideocard_SV2000E::UnloadVideocard() +BOOL CVideocard_SV2000E::UnloadVideocard(device_handle _Device) { - if (m_device) + if (_Device) { - m_status=DXStopRawVideoCallback(m_device); - m_status=DXSetRawVideoCallback(m_device, NULL, NULL); - m_status=DXDeviceStop(m_device); - DXCloseDevice(m_device); + m_status=DXStopRawVideoCallback(_Device); + m_status=DXSetRawVideoCallback(_Device, NULL, NULL); + m_status=DXDeviceStop(_Device); + DXCloseDevice(_Device); } return TRUE; } @@ -437,7 +492,17 @@ void CVideocard_SV2000E::OnPaint() int nMode; CDC* pMemDC = new CDC; CBitmap pBitBmp; - ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror); + CBitmap pBitBmpNav; + if (m_OpenDevNo==1) + { + ConvertVideoSubType(m_ImageBuffer,g_DataBuffer_NAV,m_ConvertColorType,m_bMirror); + } + else + { + ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror); + } + + BYTE *pData = (BYTE *)m_ImageBuffer.ScanLine; BITMAPINFO bmpInfo; bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); @@ -454,6 +519,13 @@ void CVideocard_SV2000E::OnPaint() pBitBmp.CreateCompatibleBitmap(dc,640,480); SetDIBits(dc->m_hDC,pBitBmp,0,480,pData,&bmpInfo,DIB_RGB_COLORS); + if (m_OpenDevNo==2)//both + { + ConvertVideoSubType(m_ImageBuffer_Nav,g_DataBuffer_NAV,m_ConvertColorType,m_bMirror); + BYTE *pDataNav = (BYTE *)m_ImageBuffer_Nav.ScanLine; + pBitBmpNav.CreateCompatibleBitmap(dc,640,480); + SetDIBits(dc->m_hDC,pBitBmpNav,0,480,pDataNav,&bmpInfo,DIB_RGB_COLORS); + } if (m_bSaveFile) { SaveBitmapToFile(pBitBmp,m_SaveFile); @@ -469,8 +541,16 @@ void CVideocard_SV2000E::OnPaint() } CBitmap* pOldBitmap = pMemDC->SelectObject(&pBitBmp); nMode = pMemDC->SetBkMode(TRANSPARENT); - - dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY); + if (m_OpenDevNo==2)//both + { + dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY); + pMemDC->SelectObject(&pBitBmpNav); + dc->BitBlt(645, 0, 640, 480, pMemDC,0,0, SRCCOPY); + } + else + { + dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY); + } pMemDC->SetBkMode(nMode); pMemDC->SelectObject(pOldBitmap); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.h index ba59aa0..28edb8a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.h @@ -37,6 +37,7 @@ protected: int m_nDevNum; DWORD m_dwCard; Image_Buffer m_ImageBuffer; + Image_Buffer m_ImageBuffer_Nav; ConvertColorType m_ConvertColorType; BOOL m_bMirror; BOOL m_bSaveFile; @@ -46,9 +47,9 @@ protected: unsigned int m_OpenDevNo; public: BOOL LoadVideocard(); - BOOL UnloadVideocard(); - void OpenDevice(unsigned int _DevNo); - void CloseDevice(); + BOOL UnloadVideocard(device_handle _Device); + void OpenDevice(unsigned int _DevNo,device_handle &_OpenedDevice); + void CloseDevice(device_handle _Device); void ConvertVideoSubType(const Image_Buffer& _ImageBuffer, BYTE *pSrcData,ConvertColorType _type,BOOL _bMirror); BOOL SaveBitmapToFile(const CBitmap& bitmap, CString lpFileName); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index fc6fbf0..bf47e02 100644 Binary files a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo and b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo differ