diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log index 9db02f9..3f97ae0 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log @@ -4768,3 +4768,10 @@ Usb Port Initialized. Usb Port Initialized. Usb Port Initialized. Usb Port Initialized. +Usb Port Initialized. +Usb Port Initialized. +Usb Port Initialized. +Usb Port Initialized. +Usb Port Initialized. +Usb Port Initialized. +Usb Port Initialized. 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 262aa22..0e13149 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 @@ -405,8 +405,8 @@ BEGIN CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,24,48,69,10 CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,24,64,68,10 CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,24,80,69,10 - CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,24,96,62,10 - CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON,24,112,62,10 + CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,195,96,62,10 + CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,195,112,62,10 CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,100,32,76,10 CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,100,48,76,10 CONTROL "LK_H激光(ETHERNET)",IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET, @@ -423,6 +423,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,145,142,50,14 PUSHBUTTON "Cancel",IDCANCEL,225,142,50,14 GROUPBOX "测试选项",IDC_STATIC,10,8,265,123 + CONTROL "MV900视频卡",IDC_RADIO_VIDEOCARD_MV900,"Button",BS_AUTORADIOBUTTON,24,96,69,10 END IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316 @@ -1015,6 +1016,22 @@ BEGIN PUSHBUTTON "Clear",IDC_BUTTON_SO7_EXTRIG_CLEAR_MSG,222,295,50,14,BS_CENTER END +IDD_SO7_VIDEOCARD_MV900 DIALOGEX 0, 0, 575, 356 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "MV900视频卡" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "开始",IDOK,520,309,53,14 + PUSHBUTTON "退出",IDCANCEL,520,338,53,14 + CONTROL "彩色图像",IDC_RADIO_MV900_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,520,22,53,10 + CONTROL "黑白图像",IDC_RADIO_MV900_GRAY,"Button",BS_AUTORADIOBUTTON,520,40,53,10 + CONTROL "垂直镜像",IDC_MV900_CHECK_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,520,66,53,10 + PUSHBUTTON "保存图片",IDC_BUTTON_MV900_SAVEFILE,520,163,53,14 + CONTROL "",IDC_STATIC_SV4000E_PICTURE,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,225,340,71,12 + PUSHBUTTON "调节参数",IDC_BUTTON_MV900_SET_PARA,520,97,53,14 + PUSHBUTTON "默认参数",IDC_BUTTON_MV900_DEFAULT_PARA,520,130,53,14 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -1186,6 +1203,15 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 309 END + + IDD_SO7_VIDEOCARD_MV900, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 573 + VERTGUIDE, 520 + TOPMARGIN, 7 + BOTTOMMARGIN, 352 + END END #endif // APSTUDIO_INVOKED diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp index 398303f..966cff1 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp @@ -23,6 +23,10 @@ #include "Videocard_TC4000.h" #include "..\..\..\Videocard\SV4000E\SV4000E.h" #include "Videocard_SV4000E.h" +#include "..\..\..\Videocard\MV900\COMM.h" +#include "..\..\..\Videocard\MV900\Convert.h" +#include "..\..\..\Videocard\MV900\MVSDK.h" +#include "Videocard_MV900.h" #endif //_RELEASE_FULL_VERSION #include "..\..\..\STIL\Common\inc\cAcqEasy.h" @@ -129,6 +133,7 @@ BOOL CSo7_Option::OnInitDialog() ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_MV900))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(TRUE); ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(FALSE); @@ -142,6 +147,7 @@ BOOL CSo7_Option::OnInitDialog() ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_MV900))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_USB_CAMERA))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->EnableWindow(FALSE); @@ -399,6 +405,14 @@ void CSo7_Option::OnBnClickedOk() delete pVideocard_TC4000; #endif //_RELEASE_FULL_VERSION } + else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_MV900))->GetCheck()) + { +#ifdef _RELEASE_FULL_VERSION + CVideocard_MV900* pVideocard_MV900=new CVideocard_MV900(); + pVideocard_MV900->DoModal(); + delete pVideocard_MV900; +#endif //_RELEASE_FULL_VERSION + } else if(((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->GetCheck()) { if (!m_pSo7_Interface) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj index d8832b3..64e86a4 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj @@ -145,7 +145,7 @@ $(IntDir);%(AdditionalIncludeDirectories) - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;..\..\..\Videocard\MV900\Convert.lib;..\..\..\Videocard\MV900\MVSDK.lib;%(AdditionalDependencies) true Windows MachineX86 @@ -206,7 +206,7 @@ true true MachineX86 - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;..\..\..\Videocard\MV900\Convert.lib;..\..\..\Videocard\MV900\MVSDK.lib;%(AdditionalDependencies) @@ -380,6 +380,7 @@ + @@ -466,6 +467,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters index 6e91b18..293ab3e 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters @@ -220,6 +220,7 @@ Sources Files + @@ -474,6 +475,7 @@ Header Files + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/VideoCardDefine.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/VideoCardDefine.h index c89e152..3c5864e 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/VideoCardDefine.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/VideoCardDefine.h @@ -21,4 +21,18 @@ typedef struct Image_Buffer } } }; -}Image_Buffer; \ No newline at end of file +}Image_Buffer; +typedef struct Image_Buffer2 +{ + unsigned char ScanLine[576][768*3]; + Image_Buffer2() + { + for (int i=0;i<576;i++) + { + for (int j=0;j<768*3;j++) + { + ScanLine[i][j]=0; + } + } + }; +}Image_Buffer2; \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_MV900.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_MV900.cpp new file mode 100644 index 0000000..8cbcb54 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_MV900.cpp @@ -0,0 +1,516 @@ +// Videocard_MV900.cpp : implementation file +// + +#include "stdafx.h" +#include "resource.h" +#include "VideoCardDefine.h" +#include "..\..\..\Videocard\MV900\COMM.h" +#include "..\..\..\Videocard\MV900\Convert.h" +#include "..\..\..\Videocard\MV900\MVSDK.h" +#include "Videocard_MV900.h" +#include "afxdialogex.h" + +#define WM_UPDATE_IMAGE WM_USER+100 +static BYTE g_DataBuffer[640*480*3]; +int m_VideoWidth=640;//640; +int m_VideoHeight=480;//480; +int m_VideoBitcount=3; +int m_DisplayWidth=640; +int m_DisplayHeight=480; +// CVideocard_MV900 dialog +HWND Msg_Hwnd=NULL; +IMPLEMENT_DYNAMIC(CVideocard_MV900, CDialog) + +CVideocard_MV900::CVideocard_MV900(CWnd* pParent /*=NULL*/) + : CDialog(CVideocard_MV900::IDD, pParent) +{ + m_ConvertColorType=RGB24TORGB; + m_bSaveFile=FALSE; + m_bMirror=FALSE; + m_status=FALSE; + m_hDev=NULL; + m_nSharpness=0; + m_nSaturation=0; + m_nHue=0; + m_nContrast=0; + m_nBrightness=0; + Msg_Hwnd=m_hWndTop; +} + +CVideocard_MV900::~CVideocard_MV900() +{ +} + +void CVideocard_MV900::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CVideocard_MV900, CDialog) + ON_WM_TIMER() + ON_BN_CLICKED(IDC_RADIO_MV900_RGB, &CVideocard_MV900::OnBnClickedRadioMv900Rgb) + ON_BN_CLICKED(IDC_RADIO_MV900_GRAY, &CVideocard_MV900::OnBnClickedRadioMv900Gray) + ON_BN_CLICKED(IDC_MV900_CHECK_MIRROR_VERTICALLY, &CVideocard_MV900::OnBnClickedMv900CheckMirrorVertically) + ON_BN_CLICKED(IDC_BUTTON_MV900_SET_PARA, &CVideocard_MV900::OnBnClickedButtonMv900SetPara) + ON_BN_CLICKED(IDC_BUTTON_MV900_SAVEFILE, &CVideocard_MV900::OnBnClickedButtonMv900Savefile) + ON_BN_CLICKED(IDOK, &CVideocard_MV900::OnBnClickedOk) + ON_BN_CLICKED(IDCANCEL, &CVideocard_MV900::OnBnClickedCancel) + ON_BN_CLICKED(IDC_BUTTON_MV900_DEFAULT_PARA, &CVideocard_MV900::OnBnClickedButtonMv900DefaultPara) + ON_MESSAGE(WM_UPDATE_IMAGE, &CVideocard_MV900::OnUpdateImage) +END_MESSAGE_MAP() + + +// CVideocard_MV900 message handlers +//============================================================================== +BOOL CVideocard_MV900::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // Add "About..." menu item to system menu. + + // IDM_ABOUTBOX must be in the system command range. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + Msg_Hwnd=AfxGetApp()->GetMainWnd()->m_hWnd; + ((CButton *)GetDlgItem(IDC_RADIO_MV900_RGB))->SetCheck(TRUE); + ((CButton *)GetDlgItem(IDC_RADIO_MV900_GRAY))->SetCheck(FALSE); + UpdateData(FALSE); + return TRUE; // return TRUE unless you set the focus to a control +} +//============================================================================== +void CVideocard_MV900::OnBnClickedRadioMv900Rgb() +{ + m_ConvertColorType=RGB24TORGB; +} +//============================================================================== +void CVideocard_MV900::OnBnClickedRadioMv900Gray() +{ + m_ConvertColorType=RGB24TOGRAY; +} +//============================================================================== +void CVideocard_MV900::OnBnClickedMv900CheckMirrorVertically() +{ + if (((CButton *)GetDlgItem(IDC_MV900_CHECK_MIRROR_VERTICALLY))->GetCheck()) + { + m_bMirror=TRUE; + } + else + { + m_bMirror=FALSE; + } +} +//============================================================================== +void CVideocard_MV900::OnBnClickedButtonMv900DefaultPara() +{ + SetVideocardDefaultPara(); +} + +//============================================================================== +void CVideocard_MV900::OnBnClickedButtonMv900SetPara() +{ + SetVideocardPara(); +} +//============================================================================== +void CVideocard_MV900::OnBnClickedButtonMv900Savefile() +{ + CString CTmpString; + CString PathName; + CString path_and_fileName; + + PathName=_T("MV900.bmp"); + CString szFilter=_T("BMP Files(*.bmp)|*.bmp|ALL Files(*.*)|*.*||"); + CFileDialog fdlg(FALSE,_T("BMP"),PathName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter); + + if( fdlg.DoModal()==IDOK) + { + m_SaveFile=fdlg.GetPathName(); + m_bSaveFile=TRUE; + } + delete fdlg; +} +//============================================================================== +void CVideocard_MV900::OnBnClickedOk() +{ + LoadVideocard(); + SetTimer(1,50,NULL); + GetDlgItem(IDOK)->EnableWindow(false); +} +//============================================================================== +void CVideocard_MV900::OnBnClickedCancel() +{ + KillTimer(1); + UnloadVideocard(); + CDialog::OnCancel(); +} +//============================================================================== +BOOL CVideocard_MV900::LoadVideocard() +{ +#ifdef _RELEASE_FULL_VERSION + long m_dwCard(0); + m_dwCard=MV_GetCardNumber(); + m_hDev = Cap_Create("MVVGA", 0); + + int m_Yoff(0),m_Xoff(0),m_Xmax(0),m_Ymax(0); + m_Yoff = Cap_GetPropery( m_hDev, SIG_YOFF ); + m_Xoff = Cap_GetPropery( m_hDev, SIG_XOFF ); + m_Xmax = Cap_GetPropery( m_hDev, SIG_WIDTH); + m_Ymax = Cap_GetPropery( m_hDev, SIG_HIGH ); + + + m_status=Cap_SetPropery(m_hDev,SIG_FRAME,25); + m_status=Cap_SetPropery(m_hDev,PIEXL_BIT,24); + m_status=Cap_SetOutSize(m_hDev,m_DisplayHeight,m_DisplayWidth); + Cap_SetCallBack(m_hDev, (PUSERCALL)MV900_PrcVidCapCallBack, this ); + m_status=Cap_Start(m_hDev); +#endif //_RELEASE_FULL_VERSION + return TRUE; +} +//============================================================================== +BOOL CVideocard_MV900::UnloadVideocard() +{ +#ifdef _RELEASE_FULL_VERSION + if (m_hDev) + { + Cap_Stop( m_hDev ); + Cap_Destroy(m_hDev); + m_hDev=NULL; + } +#endif //_RELEASE_FULL_VERSION + return TRUE; +} +//============================================================================== +BOOL CVideocard_MV900::SetVideocardDefaultPara() +{ +#ifdef _RELEASE_FULL_VERSION + long min,max,def; + Cap_GetProperyRange(m_hDev,_SHARPNESS,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_SHARPNESS,def); + Cap_GetProperyRange(m_hDev,_SATURATION,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_SATURATION,def); + Cap_GetProperyRange(m_hDev,_HUE,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_HUE,def); + Cap_GetProperyRange(m_hDev,_CONTRAST,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_CONTRAST,def); + Cap_GetProperyRange(m_hDev,_BRIGHTNESS,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_BRIGHTNESS,def); + Cap_GetProperyRange(m_hDev,_R_GRAY,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_R_GRAY,def); + Cap_GetProperyRange(m_hDev,_R_CONTRAST,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_R_CONTRAST,def); + Cap_GetProperyRange(m_hDev,_G_GRAY,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_G_GRAY,def); + Cap_GetProperyRange(m_hDev,_G_CONTRAST,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_G_CONTRAST,def); + Cap_GetProperyRange(m_hDev,_B_GRAY,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_B_GRAY,def); + Cap_GetProperyRange(m_hDev,_B_CONTRAST,&min,&max,&def); + m_status=Cap_SetPropery(m_hDev,_B_CONTRAST,def); + + m_nSharpness = Cap_GetPropery( m_hDev, _SHARPNESS ); + m_nSaturation = Cap_GetPropery( m_hDev, _SATURATION ); + m_nHue = Cap_GetPropery( m_hDev, _HUE ); + m_nContrast = Cap_GetPropery( m_hDev, _CONTRAST ); + m_nBrightness = Cap_GetPropery( m_hDev, _BRIGHTNESS ); + +#endif //_RELEASE_FULL_VERSION + return TRUE; +} +//============================================================================== +BOOL CVideocard_MV900::SetVideocardPara() +{ +#ifdef _RELEASE_FULL_VERSION + m_status=Cap_ShowOutputControl(m_hDev); +#endif //_RELEASE_FULL_VERSION + return TRUE; +} + + +//================================================================ +void CVideocard_MV900::ConvertVideoSubType(const Image_Buffer& _ImageBuffer, + BYTE *_pSrcData,ConvertColorType _type,BOOL _bMirror) +{ + int x=0; + int y=0; + long lCnt1=0; + long lCnt2=0; + long lCnt3=0; + int Color_R=0,Color_G=0,Color_B=0; + BYTE *pDstData=NULL; + for(y=0;y255)Color_R=255; + if(Color_R<0)Color_R=0; + pDstData[x+2]=static_cast(Color_R); + + + Color_G=(1164*(_pSrcData[lCnt2*2]-16)-813*(_pSrcData[lCnt3+1]-128)-392*(_pSrcData[lCnt3+3]-128))/1000; + if(Color_G>255)Color_G=255; + if(Color_G<0)Color_G=0; + pDstData[x+1]=static_cast(Color_G); + + + Color_B=(1164*(_pSrcData[lCnt2*2]-16)+2017*(_pSrcData[lCnt3+1]-128))/1000; + if(Color_B>255)Color_B=255; + if(Color_B<0)Color_B=0; + pDstData[x]=static_cast(Color_B); + + break; + } + case RGB24TOGRAY: + { + pDstData[x+2]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3; + pDstData[x+1]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3; + pDstData[x]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3; + break; + } + case YUY2TOGRAY: + { + pDstData[x+2]=_pSrcData[2*lCnt2]; + pDstData[x+1]=_pSrcData[2*lCnt2]; + pDstData[x]=_pSrcData[2*lCnt2]; + break; + } + } + if((lCnt1%2)==1) + lCnt3=lCnt3+4; + lCnt2++; + lCnt1++; + } + } +} +//================================================================ +BOOL CVideocard_MV900::SaveBitmapToFile(const CBitmap& _bitmap, CString _lpFileName) +{ + HBITMAP hBitmap; // 为刚才的屏幕位图句柄 + HDC hDC; //设备描述表 + int iBits; //当前显示分辨率下每个像素所占字节数 + WORD wBitCount(24); //位图中每个像素所占字节数 + DWORD dwPaletteSize = 0, //定义调色板大小 + dwBmBitsSize, //位图中像素字节大小 + dwDIBSize, //位图文件大小 + dwWritten; //写入文件字节数 + BITMAP Bitmap; //位图属性结构 + BITMAPFILEHEADER bmhFiledr; //位图文件头结构 + BITMAPINFOHEADER bi; //位图信息头结构 + LPBITMAPINFOHEADER lpbi; //指向位图信息头结构 + HANDLE hFile, //定义文件 + hDib, //分配内存句柄 + hPal, //调色板句柄 + hOldPal = NULL; + + //计算位图文件每个像素所占字节数 + hBitmap = (HBITMAP)_bitmap; + hDC = CreateDC(_T("DISPLAY"),NULL,NULL,NULL); + iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES); + DeleteDC(hDC); + + if (iBits <= 1) + wBitCount = 1; + else if (iBits <= 4) + wBitCount = 4; + else if (iBits <= 8) + wBitCount = 8; + else if (iBits <= 24) + wBitCount = 24; + else if (iBits <= 32) + wBitCount = 32; + + //计算调色板大小 + if (wBitCount <= 8) + dwPaletteSize = (1 << wBitCount) * sizeof (RGBQUAD); + + //设置位图信息头结构 + GetObject(hBitmap, sizeof (BITMAP), (LPSTR)&Bitmap); + bi.biSize = sizeof (BITMAPINFOHEADER); + bi.biWidth = Bitmap.bmWidth; + bi.biHeight = Bitmap.bmHeight; + bi.biPlanes = 1; + bi.biBitCount = wBitCount; + bi.biCompression = BI_RGB; + bi.biSizeImage = 0; + bi.biXPelsPerMeter = 0; + bi.biYPelsPerMeter = 0; + bi.biClrUsed = 0; + bi.biClrImportant = 0; + + dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31) / 32) * 4 * Bitmap.bmHeight; + + //为位图内容分配内存 + hDib = GlobalAlloc(GHND, dwBmBitsSize + dwPaletteSize + sizeof (BITMAPINFOHEADER)); + lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); + *lpbi = bi; + + // 处理调色板 + hPal = GetStockObject(DEFAULT_PALETTE); + if (hPal) + { + hDC = ::GetDC(NULL); + hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE); + RealizePalette(hDC); + } + + // 获取该调色板下新的像素值 + GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof (BITMAPINFOHEADER) + dwPaletteSize, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS); + + //恢复调色板 + if (hOldPal) + { + SelectPalette(hDC, (HPALETTE)hOldPal, TRUE); + RealizePalette(hDC); + ::ReleaseDC(NULL, hDC); + } + + //创建位图文件 + hFile = CreateFile(_lpFileName, GENERIC_WRITE, + 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + return FALSE; + + // 设置位图文件头 + bmhFiledr.bfType = 0x4D42; // "BM" + dwDIBSize = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize; + bmhFiledr.bfSize = dwDIBSize; + bmhFiledr.bfReserved1 = 0; + bmhFiledr.bfReserved2 = 0; + bmhFiledr.bfOffBits = (DWORD)sizeof (BITMAPFILEHEADER) + (DWORD)sizeof (BITMAPINFOHEADER) + dwPaletteSize; + + // 写入位图文件头 + WriteFile(hFile, (LPSTR)&bmhFiledr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL); + + // 写入位图文件其余内容 + WriteFile(hFile, (LPSTR)lpbi, dwDIBSize,&dwWritten, NULL); + + //清除 + GlobalUnlock(hDib); + GlobalFree(hDib); + CloseHandle(hFile); + + return TRUE; +}; +//================================================================ +void CVideocard_MV900::OnPaint() +{ + CDC* dc= this->GetDC(); + int nMode; + CDC* pMemDC = new CDC; + CBitmap pBitBmp; + CBitmap pBitBmpNav; + BYTE *pData; + CBitmap* pOldBitmap; + BITMAPINFO bmpInfo; + bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmpInfo.bmiHeader.biWidth = m_DisplayWidth; + bmpInfo.bmiHeader.biHeight = m_DisplayHeight; + bmpInfo.bmiHeader.biPlanes = 1; + bmpInfo.bmiHeader.biBitCount = 24;//X位色 + bmpInfo.bmiHeader.biCompression = BI_RGB; + bmpInfo.bmiHeader.biSizeImage = 0; + bmpInfo.bmiHeader.biXPelsPerMeter = 30000; + bmpInfo.bmiHeader.biYPelsPerMeter = 30000; + bmpInfo.bmiHeader.biClrUsed = 0; + bmpInfo.bmiHeader.biClrImportant = 0; + + ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror); + + pData = (BYTE *)m_ImageBuffer.ScanLine; + pBitBmp.CreateCompatibleBitmap(dc,m_DisplayWidth,m_DisplayHeight); + SetDIBits(dc->m_hDC,pBitBmp,0,m_DisplayHeight,pData,&bmpInfo,DIB_RGB_COLORS); + if (m_bSaveFile) + { + SaveBitmapToFile(pBitBmp,m_SaveFile); + //CImage imgTemp; + //imgTemp.Attach(pBitBmp.operator HBITMAP()); + //imgTemp.Save(m_SaveFile); + m_bSaveFile=FALSE; + } + if (!pMemDC->m_hDC) + { + pMemDC->CreateCompatibleDC(dc); + } + pOldBitmap = pMemDC->SelectObject(&pBitBmp); + nMode = pMemDC->SetBkMode(TRANSPARENT); + dc->BitBlt(0, 0, m_DisplayWidth, m_DisplayHeight, pMemDC,0,0, SRCCOPY); + + pMemDC->SetBkMode(nMode); + pMemDC->SelectObject(pOldBitmap); + ReleaseDC(pMemDC); + delete pMemDC; + ReleaseDC(dc); +} + +afx_msg LRESULT CVideocard_MV900::OnUpdateImage(WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(wParam); + UNREFERENCED_PARAMETER(lParam); + OnPaint(); + return 0; +} + +//================================================================================================ +void CVideocard_MV900::OnTimer(UINT_PTR nIDEvent) +{ + switch(nIDEvent) + { + case 1: + { + OnPaint(); + break; + } + } + + CDialog::OnTimer(nIDEvent); +} +const int iStartX(0); +const int iStartY(0); + +//==================================SV4000E===================================== +VOID CALLBACK MV900_PrcVidCapCallBack( PUCHAR pData, ULONG Length, PVOID pUserData) +{ + UNREFERENCED_PARAMETER(Length); + UNREFERENCED_PARAMETER(pUserData); + //memcpy(g_DataBuffer,(BYTE*)pData,Length);//640*480*m_VideoBitcount + for(int y=iStartY;y