From 23071b39dcdce5538b70e5929a5218414b69b8c7 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Tue, 12 Aug 2014 13:56:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0MV900=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=8D=A1=E6=B5=8B=E8=AF=95=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 7 + .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 30 +- .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 14 + .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 6 +- .../UsbUtil/Usb_Util.vcxproj.filters | 2 + .../UsbUtility/UsbUtil/VideoCardDefine.h | 16 +- .../UsbUtility/UsbUtil/Videocard_MV900.cpp | 516 ++++++++++++++++++ .../UsbUtility/UsbUtil/Videocard_MV900.h | 54 ++ .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 12 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 150016 -> 150016 bytes .../Interfac/Msi/Hsi/Videocard/MV900/COMM.h | 94 ++++ .../Msi/Hsi/Videocard/MV900/Convert.h | 34 ++ .../Msi/Hsi/Videocard/MV900/Convert.lib | Bin 0 -> 2150 bytes .../Interfac/Msi/Hsi/Videocard/MV900/MVSDK.h | 281 ++++++++++ .../Msi/Hsi/Videocard/MV900/MVSDK.lib | Bin 0 -> 13280 bytes 15 files changed, 1059 insertions(+), 7 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_MV900.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_MV900.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/COMM.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.lib create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.lib 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;yX&1ipA6<$&_Q9 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 ZHA>0%&y@f?-3|DnmBEVC_M0F({}0%*(mMbE delta 5362 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 U4we-`L^~8;vk)Nlj;BEX3AF`1IRF3v diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/COMM.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/COMM.h new file mode 100644 index 0000000..9bdfff3 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/COMM.h @@ -0,0 +1,94 @@ +#ifndef __COMM_H__ +#define __COMM_H__ + +#include "Windows.h" +#ifdef __cplusplus +#define MVVGA extern "C" __declspec (dllexport) +#else +#define MVVGA __declspec (dllexport) +#endif + +// 图像内容动态改变消息, WPARAM, LPARAM参数不使用 +#define VGA_IMAGECHANGE WM_USER + 1011 +// 信号丢失消息, WPARAM, LPARAM参数不使用 +#define VGA_SIGNALLOST WM_USER + 1012 +// 信号改变消息, WPARAM的高16位为信号有效的高, 低16位为信号有效的宽; +// LPARAM的高16位为信号垂直偏移, 低16位为信号水平偏移; +#define VGA_SIGNALCHANGE WM_USER + 1013 + +enum VGAPROPERY{ DRV_INDX=0, // 仅读, 返回当前卡的驱动下标 + GET_TYPE, // 仅读, 返回当前卡类型 + SIG_SOURCE, // 读写, 同步源选择,0--行场分离,1--绿路同步, I/III型卡有效,II/IV型卡无效 + SIG_VHZ, // 仅读, 输入信号的场频 + SIG_HHZ, // 仅读, 行频率 + SIG_HTOTAL, // 读写, 当前信号行内总点数 + SIG_VTOTAL, // 读写, 当前信号场内总行数, I/III型卡有效,II/IV型卡无效 + SIG_VPOLAR, // 读写, 当前信号场极性, I/III型卡有效,II/IV型卡无效 + SIG_PLLV, // 读写, 当前信号PLL电压 + SIG_PLLI, // 读写, 当前信号PLL电流 + SIG_XOFF, // 读写, 当前信号的水平偏移 + SIG_YOFF, // 读写, 当前信号的垂直偏移 + SIG_HIGH, // 读写, 当前信号的垂直高度 + SIG_WIDTH, // 读写, 当前信号的水平宽度 + SIG_FRAME, // 读写, 采集时的桢间隔时间ms级 + SIG_UPDOWN, // 读写, 采集时上下翻转 + // 设置/得到当前采集图像的尺寸, 但不一定为输入图像信号的大小. 输入的大小如果和 + // 输入图像信号的大小对应, 则采集到的图像是未被缩放的原始图像, 否则采集到的图 + // 像将被缩放. + OUT_HIGH, // 读写, DSHOW输出窗口高 + OUT_WIDTH, // 读写, DSHOW输出窗口宽 + OUT_QUALITY, // 读写, 缩放质量选择 + CHK_DOING, // 仅写, 手动行场频测试,I型卡有效,II型卡无效 + USER_EVENT, // 信号改变/丢失事件,写时初始化,读时反初始化,I型卡无效,II型卡有效 + USER_CAUSE, // 被有事件的原因,写无效,读时有效,0-信号正常,1-信号丢失,2-信号改变 + RESET_SAVE, // Get 信号文件保存 = 1; 恢复 = 0; + GET_SIGIMAGE, // 未实现,仅为占位,用函数Cap_GetOutImage()和Cap_GetSignalImage()代替 + GET_NUMBER, // Get 得当前采集的桢率 + SIG_CAPMODE, // 设置板卡采集模式;1 -- 快速模式;0 -- 普通模式 + // 调节属性量, 对当前图像的R/G/B分量进行调节, 每个分量都有亮度和对比度两项, + // 值越小表现越明显. 最小的值0, 代表最大的对比度或最大的亮度. + _BRIGHTNESS, // 亮度 + _HUE, // 色度 + _SATURATION, // 饱和度 + _CONTRAST, // 对比度 + _GAMMA, // + _SHARPNESS, // 锐利度 + _R_GRAY, // VGA卡的R分量的亮度 + _G_GRAY, // VGA卡的G分量的亮度 + _B_GRAY, // VGA卡的B分量的亮度 + _R_CONTRAST, // VGA卡的R分量的对比度 + _G_CONTRAST, // VGA卡的G分量的对比度 + _B_CONTRAST, // VGA卡的B分量的对比度 + // + PIEXL_BIT, // 得到或设置当前采集图像的像素位数, 取值为32(32位RGBa888)/24 + // (24位RGB888)/16(16位YUV422)/8(8位灰度图); 能否采集到8位灰 + // 度图要根据卡型决定; 对于黑白医疗/雷达信号卡,采集32位/24位 + // 时是将8位的图像扩展到真彩色方式输出, 这样不丢失灰度级. + NOTIFY_HWND, // 为VGA_SIGNALLOST和VGA_SIGNALCHANGE消息设置接收窗口句柄 + DEV_AVI, + DEV_RAW, +}; + + +typedef struct _DATAGET_{ ULONG Width; + ULONG High; + USHORT nColor; + USHORT bWait; + PUCHAR pData; + }DATAGET, *PDATAGET; + +// 画笔样式 +enum PEN_STYLE{ _SOLID = 0, _DASH, _DOT, _DASHDOT, _DASHDOTDOT }; + +// 用户回调函数的原型 +// pData : 当该用户回调函数被调用时,该参数为图像数据的缓冲区地址 +// Length : 当该用户回调函数被调用时,该参数为图像数据的缓冲区长度 +// pUserData: 在设置用户回调函数时传入的用户上下文的指针 +typedef VOID (WINAPI *PUSERCALL)( PUCHAR pData, ULONG Length, PVOID pUserData ); + +// 初始化显示模块时传入的使用DRAW方式的显示的用户回调函数的原型,使用DRAW方式可以在原图像上 +// 进行绘制文字和图形体,绘制的时机和过程在该回调函数中完成; 进行绘制使用WINDOWS的点, 线, +// TextOut API绘制. +typedef VOID (WINAPI *USERDRAW)( HDC hDC, PVOID pContext ); + +#endif //__COMM_H__ \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.h new file mode 100644 index 0000000..2b742f8 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.h @@ -0,0 +1,34 @@ +#ifndef __CONVERT_H__ +#define __CONVERT_H__ +#include "windows.h" + +#ifdef __cplusplus +#define CONVERT extern "C" __declspec (dllexport) +#else +#define CONVERT __declspec (dllexport) +#endif + +#ifndef UINT32 +#define UINT32 unsigned long +#endif + +#ifndef SINT32 +#define SINT32 long +#endif + +#ifndef UINT16 +#define UINT16 unsigned short +#endif + +#ifndef SINT16 +#define SINT16 short +#endif + +#ifndef UINT8 +#define UINT8 unsigned char +#endif + +CONVERT VOID WINAPI InitTables(); //初始化YUV422转换表 +//YUV422转RGB24 +CONVERT VOID WINAPI Convert422(UINT32 XSize,UINT32 YSize,UINT8 *pBuf,UINT8 *pBGR); +#endif \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.lib b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/Convert.lib new file mode 100644 index 0000000000000000000000000000000000000000..f7fba2e20eb78f099af3b9f0f6b41584d94102e9 GIT binary patch literal 2150 zcmcIlOKuuL5PiePPOulq$tqE#iR6W|A%OWxC>nnv1u@3fc)T8Cz%ddw7RKJ@0$H%k z39`%qva)i3EV9Vj2gnI5BvRFMLr?ewB)cW1tEyj9Rj;bMUl%Iv>e;)JrE87O9fJU^4F!g>v_e!gMG*KcHbZFIK=~Z-|==@7dQ2G z2cB0xvh8sIK1sx2-TiP>E_u6K?iRe_MWf?ZPMY;AD^B|x=a=NbXOmk~$)uIYD2U&< zaK8DRB;q(i$>QDsLSdk=1oX(zWuqJ{h7p2+fS7|&>8gnQ;f`mo@YCs$dHa)^M8;Ge z<){p=|G{{3`}gF>6F=F+i-%zy!q_0U665F%PF1 zJ0E{3R;!;}e_TIQp0-J7QvUj|5Z#V7YL!l9J*n)^N%%&%9}>$sT8Q6DTt?wmNx0K+ zY`0+E5@lG!Q&zE}6>S60qTFc%&gk5c+&9tI9mq?KrvM!KKJ1O6WjohNNTw6RyTCRA;v{?*v2lbjCUr_pER8-|r)(-Kcgk0# z$eBCkaXMh0y1t?)rrywzg?Y>7HQoj{$Zzs6sPbgqK9BJ+JYi|I#J%`aDRS0MSV}E1 z?w3+D+{5uZFQ-#4<%Ky-W!3x4?=YWF+u)n|rO0pf-Mxywa>xJx literal 0 HcmV?d00001 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.h new file mode 100644 index 0000000..763b181 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.h @@ -0,0 +1,281 @@ +#ifndef __MVVGA_H__ +#define __MVVGA_H__ + +#include "COMM.h" + +///////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////// 设 备 相 关 控 制 部 件 ///////////////////////////////////// + +MVVGA long WINAPI MV_GetCardNumber(); +/*******************************************************************************************/ +/* 描述 : 创建/释放 MVVGA捕获设备 */ +/* Description: "MVVGA" */ +/* Index : 以0为下标的卡号, 最大支持一机4卡 */ +/* hCap : 由Cap_Create()创建的MVVGA设备句柄 */ +/* 返回值 : 返回设备的句柄, 下面的函数中对该设备的操作都需要该设备句柄. */ +MVVGA HANDLE WINAPI Cap_Create( char *Description, ULONG Index ); +MVVGA VOID WINAPI Cap_Destroy( HANDLE hCap ); + +/*******************************************************************************************/ +/* 描述 : 运行/停止设备, 开始捕获图像数据, 如果希望用消息方式来获得图像数据则hWnd参数*/ +/* 不为NULL, 是接收VGA_IMAGEDATA消息的窗口句柄, 该消息的WPARAM参数为图像缓冲指*/ +/* 针, LPARAM参数为图像缓冲的字节大小. */ +/* 强烈建议使用回调方式来获得图像数据, 而将该hWnd置为NULL; 消息方式获得图像数 */ +/* 据是一种辅助手段. 当你的处理时间大于MVVGA设备回调时间时消息方式才是最有效的*/ +/* hCap : 要运行的MVVGA设备句柄 */ +/* hWnd : 接收VGA_IMAGEDATA消息的窗口句柄, 一般设置为NULL, 不使能消息方式. */ +/* 返回值 : TRUE成功; FALSE失败 */ +MVVGA BOOL WINAPI Cap_Start( HANDLE hCap ); +MVVGA VOID WINAPI Cap_Stop( HANDLE hCap ); + +/*******************************************************************************************/ +/* 描述 : 设置MVVGA捕获设备的图像数据的用户回调函数,当每一桢图像到达时该回调被调用. */ +/* 回调函数可在任意时刻被设置,一旦设置即被生效. 要注意的是回调函数是用户写的代*/ +/* 码被嵌入到系统中, 由中断驱动的,所以要尽可能的精悍, 尽量不要超过一帧的时间; */ +/* 否则将严重拉慢系统. 如果采集回调不能满足上面的时间要求你可用消息方式 */ +/* hCap : 已经创建的MVVGA设备句柄 */ +/* pCall : 设备的用户回调函数,回调函数的原型在COMM.h中 */ +/* pContext : 传入用户回调函数中的用户定义的上下文指针 */ +/* 返回值 : 无 */ +MVVGA VOID WINAPI Cap_SetCallBack( HANDLE hCap, PUSERCALL pCall, PVOID pContext ); + +/*******************************************************************************************/ +/* 描述 : 设置输出高和宽, 得到输出高和宽用Cap_GetPropery来完成 */ +/* High, Width: 输出图像高, 宽 */ +/* hCap : 已经创建的MVVGA设备句柄 */ +/* 返回值 : TRUE成功; FALSE失败; */ +MVVGA BOOL WINAPI Cap_SetOutSize( HANDLE hCap, ULONG High, ULONG Width ); + +/*******************************************************************************************/ +/* 描述 : 设置/得到板卡和输入信号/缩放/图像R/G/B分量进行调节控制属性 */ +/* hCap : 已经创建的MVVGA设备句柄 */ +/* Propery : 控制属性的类型; 看COMM.h */ +/* Val : 设置该类型参数的值 */ +/* Set返回值 : TRUE成功; FALSE失败; */ +/* Get返回值 : 返回该类型参数的值 */ +MVVGA BOOL WINAPI Cap_SetPropery( HANDLE hCap, VGAPROPERY Propery, ULONG Val ); +MVVGA LONG WINAPI Cap_GetPropery( HANDLE hCap, VGAPROPERY Propery ); +MVVGA LONG WINAPI Cap_GetProperyRange( HANDLE hCap, VGAPROPERY Propery,PLONG pMin,PLONG pMax,PLONG pDefault); + +/*******************************************************************************************/ +// 描述 : 弹出设备的图像输出控制调节对话框, 方便编程 */ +// hCap : 已经创建的MVVGA设备句柄 */ +// 返回值 : TRUE成功; FALSE失败 */ +MVVGA BOOL WINAPI Cap_ShowOutputControl( HANDLE hCap ); + +/*******************************************************************************************/ +/* 描述 : 手动同步方式得到一帧图像的数据, 直到得到图像后该函数才返回 */ +/* hCap : 已经创建的MVVGA设备句柄 */ +/* pBuf : 你传入的缓冲区指针; 如果为NULL, 则在该函数返回时得到的是内部缓冲区的指针 */ +/* Len : 输入时是你传入的缓冲区的大小, 如果该长度小于当前图像的长度则, 则在该函数返 */ +/* 回时得到的是内部缓冲区的指针. */ +/* 返回值 : 返回你传入的缓冲区指针, 或内部的内部缓冲区指针, 或出错为NULL; */ +/* *Len返回为实际的图像的大小. */ +MVVGA PVOID WINAPI Cap_GetOutImage( HANDLE hCap, PUCHAR pBuf, ULONG* Len ); + +MVVGA PVOID WINAPI Cap_GetSignalImage( HANDLE hCap, PULONG pHigh, PULONG pWidth, PULONG pColor ); + +///////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////// MVVGA 显 示 部 件 ////////////////////////////////////// +/*******************************************************************************************/ +/* 描述 : 创建MVVGA的显示部件. 可以创建任意个该部件, 创建的显示部件分为Show和Draw两种,*/ +/* Show方式只能显示不能在图像上叠加/OSD/重画, Draw方式能显示能在图像上叠加/OSD/*/ +/* 重画. 每一种显示都可进行按照不同的缩放质量缩放. */ +/* hWnd : 待显示的窗口句柄 */ +/* High,Width: 输入的图像缓冲的原始高度, 宽度 */ +/* nColor : 像素的位数(bits) */ +/* pDrawCall : 用户重画的回调函数, 任选的可为NULL, 如果非NULL则在显示之前调用该回调, 回调中*/ +/* 给你了一个HDC, 你可用它来重画希望的点/线/弧/圆/字串 */ +/* pContext : 回调函数的参数, 任选的可为NULL, 在回调发生时传入用户回调 */ +/* 返回值 : 返回创建的显示部件的句柄 */ +MVVGA HANDLE WINAPI Disp_Create( HWND hWnd, ULONG High, ULONG Width, ULONG nColor, + USERDRAW pDrawCall, PVOID pContext ); +MVVGA VOID WINAPI Disp_Destroy( HANDLE hShow ); // 释放MVVGA的显示部件 + +/*******************************************************************************************/ +/* 描述 : 直接显示Show函数, 将pImage中的图像数据直接从左上角指定的位置显示, 无缩放 */ +/* hShow : 显示部件句柄 */ +/* pImage : 图像数据指针 */ +/* Top, Left: 显示位置的左上方位置 */ +MVVGA VOID WINAPI Disp_ShowDirect( HANDLE hShow, PVOID pImage, int Top, int Left ); + +/*******************************************************************************************/ +/* 描述 : 直接显示Draw函数, 将pImage的图像数据直接从左上角指定的位置显示, 无缩放可叠加 */ +/* hShow : 显示部件句柄 */ +/* pImage : 图像数据指针 */ +/* Top, Left: 显示位置的左上方位置 */ +MVVGA VOID WINAPI Disp_DrawDirect( HANDLE hShow, int Top, int Left ); + +/*******************************************************************************************/ +/* 描述 : 使用Draw或Show的缩放版函数时控制缩放质量的,注意越好的质量越暂用CPU */ +/* hShow : 显示部件句柄 */ +/* Quality : 显示质量,有四级显示质量: {0, 1, 2, 3} */ +MVVGA VOID WINAPI Disp_ZoomQuality( HANDLE hShow, ULONG Quality ); + +/*******************************************************************************************/ +/* 描述 : 缩放版的显示Show函数, 不可叠加 */ +/* hShow : 显示部件句柄 */ +/* pImage : 图像数据指针 */ +/* Top, Left : 显示位置的左上方位置 */ +/* High,Width: 要缩放显示的高度, 宽度 */ +MVVGA VOID WINAPI Disp_ShowZoom( HANDLE hShow, PVOID pImage, int Top, int Left, int High, + int Width ); + +/*******************************************************************************************/ +/* 描述 : 缩放版的显示Draw函数, 可叠加 */ +/* hShow : 显示部件句柄 */ +/* pImage : 图像数据指针 */ +/* Top, Left : 显示位置的左上方位置 */ +/* High,Width: 要缩放显示的高度, 宽度 */ +MVVGA VOID WINAPI Disp_DrawZoom( HANDLE hShow, int Top, int Left, int High, int Width ); + +/*******************************************************************************************/ +/* 描述 : 得到显示部件的显示表面的地址, 一般用Draw显示时, 在显示之前需要用户自己象该空*/ +/* 间填充显示数据, 用该函数得到显示表面的地址然后用Disp_HelpDrawFill来填充它 */ +/* hShow : 显示部件句柄 */ +/* pLength : 调用返回时返回显示表面缓冲区的长度 */ +/* bShow : 希望得到Draw方式还是Show方式的显示表面缓冲区                */ +/* 返回值 : 返回显示表面缓冲区指针 */ +MVVGA PVOID WINAPI Disp_HelpBuffer( HANDLE hShow, PULONG pLength, BOOL bShow ); +/*******************************************************************************************/ +/* 描述 : 帮助函数, 帮助象显示表面缓冲区填充要显示的数据,内部实际为memcpy */ +/* hShow : 显示句柄 */ +/* pImage : 显示内容 */ +MVVGA VOID WINAPI Disp_HelpDrawFill( HANDLE hShow, PVOID pImage ); + +/*******************************************************************************************/ +// 描述 : 帮助函数, 在使用Draw时可以叠加字符串,用该帮助函数设置显示时字体的颜色    */ +// hShow : 显示句柄 */ +// R/G/B : R分量/G分量/B分量 */ +MVVGA VOID WINAPI Disp_HelpDrawTextColor( HANDLE hShow, UCHAR R, UCHAR G, UCHAR B ); + +/*******************************************************************************************/ +/* 描述 : 帮助函数, 在使用Draw时可以叠加字符串,用该帮助函数设置显示时字体格式, 该函数 */ +/* 被调用时将弹出Windows字体选择对话框                    */ +/* hShow : 显示句柄 */ +MVVGA VOID WINAPI Disp_HelpDrawTextFormat( HANDLE hShow ); + +/*******************************************************************************************/ +/* 描述 : 帮助函数, 在使用Draw时可以叠加点/线/弧/圆/字串,用该帮助函数设置画线的宽度/ */ +/* 样式和颜色                                  */ +/* hShow : 显示句柄 */ +/* Style : 画笔风格 */ +/* Width : 画笔宽度 */ +/* R/G/B : R分量/G分量/B分量 */ +MVVGA VOID WINAPI Disp_HelpDrawPen( HANDLE hShow, PEN_STYLE Style, int Width, UCHAR R, + UCHAR G, UCHAR B ); + + +///////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////// MVVGA 文 件 部 件 ////////////////////////////////////// +/*******************************************************************************************/ +/* 描述 : 创建文件部件,可创建任意多个.用来将图像存为Raw/JPG/BMP文件         */ +/* FileName : 包含路径的文件名字串                            */ +/* High,Width: 要存图像的高和宽 */ +/* nColor : 要存图像的像素位宽32/24/16/8                   */ +/* bFlip : 存储时是否上下翻转,注意Windows中BMP图像在显示和存放时是上下颠倒的     */ +/* bColor  : 存储为JPG文件时是否将颜色去掉                        */ +/* Quality : 存储为JPG文件时的压缩质量1- 100                      */ +/* 返回值 : 返回创建的文件部件句柄 */ +MVVGA HANDLE WINAPI File_Create( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, + BOOL bFlip, BOOL bColor, ULONG Quality ); +MVVGA VOID WINAPI File_Destroy( HANDLE hFile ); // 释放创建的文件部件 +/*******************************************************************************************/ +/* 描述 : 写为Raw/Bmp/Jpg文件                             */ +/* hFile : 文件部件句柄 */ +/* pData   : 要存图像的缓冲区指针 */ +/* nImage : pData中存在几幅图像                           */ +MVVGA VOID WINAPI File_WriteRaw( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为文件Raw +MVVGA VOID WINAPI File_WriteBmp( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为Bmp文件 +MVVGA VOID WINAPI File_WriteJpg( HANDLE hFile, PUCHAR pData, ULONG nImage ); // 写为Jpg文件 + +MVVGA VOID WINAPI VGA_ToBmp( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, PUCHAR pData, BOOL bFlip ); +MVVGA VOID WINAPI VGA_ToJpeg( PCHAR FileName, ULONG High, ULONG Width, ULONG nColor, PUCHAR pData, BOOL bFlip, BOOL bColor, ULONG Quality ); + +///////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////// MVVGA AVI 文 件 部 件 //////////////////////////////////// +/*******************************************************************************************/ +/* 描述 : 创建AVI文件部件,可选择压缩或不压缩,可创建任意多个.可将创建的监控部件句柄 */ +/* 用Cap_SetPropery(hCap,DEV_AVI, (ULONG)hAvi)来嵌入到设备中, 强烈不建议这样做 */ +/* 但如果你能保证AVIStream_Write占用的时间小于设备桢回调的时间(要压缩, 且CPU够)*/ +/* 强大,或用Raid双速系统)用迁入的方法将是首选的方法 */ +/* bUpDown : 存储时是否上下翻转                             */ +/* High,Width: 要存图像的高和宽 */ +/* nColor : 要存图像的像素位宽32/24/16/8                   */ +/* 返回值 : 返回创建的文件部件句柄 */ +MVVGA HANDLE WINAPI AVIStream_Create( BOOL bUpDown, ULONG High, ULONG Width, ULONG nColor ); +// 注意: 在调用AVIStream_Destroy之前为保险要用Cap_SetPropery( hCap, DEV_AVI, NULL ); +MVVGA VOID WINAPI AVIStream_Destroy( HANDLE hAvi ); // 释放创建的文件部件 + +/*******************************************************************************************/ +/* 描述 : 开始写AVI文件,在这之后的每一次对AVIStream_Write的调用都将向AVI文件中写入一 */ +/* 桢图像                            */ +/* hAvi : Avi文件部件句柄                            */ +/* FileName : 包含路径的文件名字串                            */ +/* dwRate : 写Avi文件的桢速率                           */ +/* 返回值 : TRUE成功; FALSE失败 */ +MVVGA BOOL WINAPI AVIStream_StartAviStream( HANDLE hAvi, char* FileName, ULONG dwRate ); +MVVGA VOID WINAPI AVIStream_StopAviStream( HANDLE hAvi ); // 停止写AVI文件 + +/*******************************************************************************************/ +/* 描述 : 开始写AVI文件之前可以用该函数选择是否使用压缩器,选择的压缩器是今后默认的, */ +/* 直到用该函数又进行其它的选择.                      */ +/* hAvi : Avi文件部件句柄                            */ +MVVGA VOID WINAPI AVIStream_Select( HANDLE hAvi ); + +/*******************************************************************************************/ +/* 描述 : 写AVI文件的主工作函数,它将你按照之前设置的方式工作,每调一次写入一桢图像  */ +/* 如果你在创建hAvi之后将hAvi嵌入到MVVGA设备部件中则你不需调用该函数      */ +/* hAvi : Avi文件部件句柄                            */ +/* pData : 图像数据指针                              */ +MVVGA BOOL WINAPI AVIStream_Write( HANDLE hAvi, PUCHAR pData ); + + +///////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////// MVVGA 很 少 使 用 的 文 件 部 件 ////////////////////////////// +/*******************************************************************************************/ +MVVGA HANDLE WINAPI RawStream_Create(); +MVVGA VOID WINAPI RawStream_Destroy( HANDLE hRaw ); +MVVGA VOID WINAPI RawStream_Stop( HANDLE hRaw ); +MVVGA BOOL WINAPI RawStream_New( HANDLE hRaw, ULONG High, ULONG Width, ULONG nColor, + char* FileName ); +MVVGA ULONG WINAPI RawStream_Open( HANDLE hRaw, PULONG High, PULONG Width, PULONG nColor, + char* FileName ); +MVVGA ULONG WINAPI RawStream_Read( HANDLE hRaw, ULONG ImageIndex, PUCHAR pData ); +MVVGA VOID WINAPI RawStream_Write( HANDLE hRaw, PUCHAR pData ); + + +///////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////// MVVGA 缩 放 部 件 ////////////////////////////////////// +/*******************************************************************************************/ +/* 描述 : 创建MVVGA的缩放部件. 可以创建任意个该部件, 可进行按照不同的缩放质量缩放   */ +/* nColor : 图像的像素位宽                 */ +/* High,Width: 图像原始的高度宽度               */ +/* DecsHigh : 图像被缩放后高度                */ +/* DecsWidth : 图像被缩放后宽度                */ +/* Quality : 缩放的质量,有四级显示质量: {0, 1, 2, 3} */ +/* 返回值 : 返回创建的缩放部件句柄 */ +MVVGA HANDLE WINAPI Stretch_Create( ULONG nColor, ULONG High, ULONG Width, ULONG DecsHigh, + ULONG DecsWidth, ULONG Quality ); +MVVGA VOID WINAPI Stretch_Destroy( HANDLE hStretch ); // 释放创建的缩放部件 + +/*******************************************************************************************/ +/* 描述 : 快速的2x2抽点抽行法缩放,图像高宽为原来的一半                */ +/* hStretch : 缩放部件句柄                             */ +/* pIn   : 输入图像缓冲区指针               */ +/* pOut  : 输出图像缓冲区指针               */ +MVVGA VOID WINAPI Stretch_Half( HANDLE hStretch, PUCHAR pIn, PUCHAR pOut ); +/*******************************************************************************************/ +/* 描述 : 快速的2x2抽点抽行法缩放,图像高宽为原来的一半                */ +/* hStretch : 缩放部件句柄                             */ +/* pIn   : 输入图像缓冲区指针               */ +/* 返回值 : 返回被缩放的图像缓冲区指针  */ +MVVGA PVOID WINAPI Stretch_Do( HANDLE hStretch, PUCHAR pIn ); + +//目前支持RGB24和RGB32 +MVVGA VOID WINAPI Rotate_Hflip(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width); +MVVGA VOID WINAPI Rotate_Ang90(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width); +MVVGA VOID WINAPI Rotate_Ang180(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width); +MVVGA VOID WINAPI Rotate_Ang270(PUCHAR pIn, PUCHAR pOut,ULONG nColor, ULONG High, ULONG Width); + +#endif //__MVVGA_H__ \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.lib b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/MV900/MVSDK.lib new file mode 100644 index 0000000000000000000000000000000000000000..b30f135af58242e77c84e86b59ad90c2f598f148 GIT binary patch literal 13280 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