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