123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943 |
- // TestDevCaptureDlg.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "TestDevCapture.h"
- #include "TestDevCaptureDlg.h"
- #include "afxdialogex.h"
- #include "xDevCapture.h"
- #pragma comment(lib,"DevCapture.lib")
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- #define TIMER1 1
-
- bool isOpenDevice=false;
- CTestDevCaptureDlg *mDlg;
- CString ImgFolderPath;
- CArray<CString> FileArry;
- int pIndex=0;
- int pPreviewW=140;
- const int edgeSapce=2;
- CArray<CString> previewSize;
- int previewWidth=640;
- int previewHeight=480;
- int RotateAngle=0;
- char* UnicodeToAnsi( const wchar_t* szStr )
- {
- int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
- if (nLen == 0)
- {
- return NULL;
- }
- char* pResult = new char[nLen];
- WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
- return pResult;
- }
- CString GetExePath(void)
- {
- CString m_strPath;
- int nPos;
- GetModuleFileName(NULL, m_strPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
- m_strPath.ReleaseBuffer();
- nPos = m_strPath.ReverseFind(_T('\\'));
- m_strPath = m_strPath.Left(nPos);
- return m_strPath;
- }
- // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
- class CAboutDlg : public CDialogEx
- {
- public:
- CAboutDlg();
- // 对话框数据
- enum { IDD = IDD_ABOUTBOX };
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- // 实现
- protected:
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
- {
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
- END_MESSAGE_MAP()
- // CTestDevCaptureDlg 对话框
- CTestDevCaptureDlg::CTestDevCaptureDlg(CWnd* pParent /*=NULL*/)
- : CDialogEx(CTestDevCaptureDlg::IDD, pParent)
- {
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void CTestDevCaptureDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_COMBO1, cb_devname);
- DDX_Control(pDX, IDC_COMBO2, cb_preRes);
- DDX_Control(pDX, IDC_LIST1, m_list);
- DDX_Control(pDX, IDC_COMBO3, cb_format);
- DDX_Control(pDX, IDC_COMBO4, cb_color);
- DDX_Control(pDX, IDC_COMBO5, cb_dpi);
- }
- BEGIN_MESSAGE_MAP(CTestDevCaptureDlg, CDialogEx)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_BUTTON1, &CTestDevCaptureDlg::OnBnClickedButton1)
- ON_BN_CLICKED(IDC_BUTTON2, &CTestDevCaptureDlg::OnBnClickedButton2)
- ON_BN_CLICKED(IDC_BUTTON3, &CTestDevCaptureDlg::OnBnClickedButton3)
- ON_CBN_SELCHANGE(IDC_COMBO2, &CTestDevCaptureDlg::OnCbnSelchangeCombo2)
- ON_WM_DESTROY()
- ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CTestDevCaptureDlg::OnNMDblclkList1)
- ON_BN_CLICKED(IDC_BUTTON6, &CTestDevCaptureDlg::OnBnClickedButton6)
- ON_BN_CLICKED(IDC_BUTTON5, &CTestDevCaptureDlg::OnBnClickedButton5)
- ON_WM_TIMER()
- ON_CBN_SELCHANGE(IDC_COMBO1, &CTestDevCaptureDlg::OnCbnSelchangeCombo1)
- ON_BN_CLICKED(IDC_CHECK2, &CTestDevCaptureDlg::OnBnClickedCheck2)
- ON_BN_CLICKED(IDC_BUTTON4, &CTestDevCaptureDlg::OnBnClickedButton4)
- ON_BN_CLICKED(IDC_BUTTON7, &CTestDevCaptureDlg::OnBnClickedButton7)
- ON_BN_CLICKED(IDC_BUTTON8, &CTestDevCaptureDlg::OnBnClickedButton8)
- ON_BN_CLICKED(IDC_BUTTON9, &CTestDevCaptureDlg::OnBnClickedButton9)
- ON_BN_CLICKED(IDC_BUTTON10, &CTestDevCaptureDlg::OnBnClickedButton10)
- ON_BN_CLICKED(IDC_BUTTON11, &CTestDevCaptureDlg::OnBnClickedButton11)
- ON_BN_CLICKED(IDC_BUTTON12, &CTestDevCaptureDlg::OnBnClickedButton12)
- ON_BN_CLICKED(IDC_CHECK3, &CTestDevCaptureDlg::OnBnClickedCheck3)
- ON_CBN_SELCHANGE(IDC_COMBO3, &CTestDevCaptureDlg::OnCbnSelchangeCombo3)
- ON_CBN_SELCHANGE(IDC_COMBO4, &CTestDevCaptureDlg::OnCbnSelchangeCombo4)
- ON_CBN_SELCHANGE(IDC_COMBO5, &CTestDevCaptureDlg::OnCbnSelchangeCombo5)
- ON_BN_CLICKED(IDC_BUTTON13, &CTestDevCaptureDlg::OnBnClickedButton13)
- ON_BN_CLICKED(IDC_BUTTON14, &CTestDevCaptureDlg::OnBnClickedButton14)
- ON_BN_CLICKED(IDC_BUTTON15, &CTestDevCaptureDlg::OnBnClickedButton15)
- ON_BN_CLICKED(IDC_BUTTON16, &CTestDevCaptureDlg::OnBnClickedButton16)
- ON_BN_CLICKED(IDC_BUTTON17, &CTestDevCaptureDlg::OnBnClickedButton17)
- ON_BN_CLICKED(IDC_BUTTON18, &CTestDevCaptureDlg::OnBnClickedButton18)
- ON_BN_CLICKED(IDC_RADIO1, &CTestDevCaptureDlg::OnBnClickedRadio1)
- ON_BN_CLICKED(IDC_RADIO2, &CTestDevCaptureDlg::OnBnClickedRadio2)
- ON_BN_CLICKED(IDC_RADIO3, &CTestDevCaptureDlg::OnBnClickedRadio3)
- END_MESSAGE_MAP()
- // CTestDevCaptureDlg 消息处理程序
- /*
- 获取设备相关信息
- */
- int CTestDevCaptureDlg::toGetCamInfo()
- {
- int iRest=-1;
- int DevCount=GetDeviceCount();
- if(DevCount<=0)
- {
- AfxMessageBox(_T("未发现合适的设备!"));
- return -1;
- }
- for(int i=0;i<DevCount;i++)
- {
- char nbuf[100];
- iRest=GetDeviceName(i,nbuf);
- if(iRest==0)
- {
- cb_devname.AddString((CString)nbuf);
- }
- }
- if(cb_devname.GetCount()>0)
- cb_devname.SetCurSel(0);
- return 0;
- }
- /*
- 获取设备分辨率
- */
- int CTestDevCaptureDlg::toGetCamResolution()
- {
- int iRest=-1;
- int resCount=GetStillResolutionCount(cb_devname.GetCurSel()); //获取预览分辨率数目
- if(resCount<=0) return -1;
- int width=0;
- int height=0;
- CString resStr;
- CArray<int> ListWidth;
- CArray<int> ListHeght;
- for(int i=0;i<resCount;i++)
- {
- iRest=GetStillResolution(i,width,height); //获取预览分辨率
- if(iRest==0)
- {
- ListWidth.Add(width);
- ListHeght.Add(height);
- resStr.Format(_T("%d*%d"),width,height);
- cb_preRes.AddString(resStr);
- }
- }
- int cmpVal=0;
- int pos=0;
- for(int i=0;i<ListWidth.GetSize();i++)
- {
- if(ListWidth.GetAt(i)>cmpVal)
- {
- cmpVal=ListWidth.GetAt(i);
- pos=i;
- }
- }
- if(cb_preRes.GetCount()>0)
- cb_preRes.SetCurSel(pos);
- return 0;
- }
- /*
- 打开摄像头
- */
- int CTestDevCaptureDlg::toOpenDevice()
- {
- if(isOpenDevice)
- CloseDevice();
- if(cb_devname.GetCount()>0 && cb_preRes.GetCount()>0)
- {
- int iRest=-1;
- int CamIndx=cb_devname.GetCurSel();
- CString resStr;
- cb_preRes.GetLBText(cb_preRes.GetCurSel(),resStr);
- int pos=resStr.Find('*');
- int previewWidth=_ttoi(resStr.Left(pos));
- int previewHeight=_ttoi(resStr.Right(resStr.GetLength()-pos-1));
- CWnd *pWnd=GetDlgItem(IDC_PICA);
- HWND hwnd = pWnd->GetSafeHwnd();
- iRest=OpenDeviceEx(CamIndx,previewWidth,previewHeight,hwnd,true);
- if(iRest!=0)
- {
- isOpenDevice=false;
- AfxMessageBox(_T("开启设备失败!"));
- return -1;
- }
- else
- {
- isOpenDevice=true;
- }
- }
- return 0;
- }
- void CTestDevCaptureDlg::OnDestroy()
- {
- CDialogEx::OnDestroy();
- CloseDevice();
- GdiplusShutdown(m_GdiplusToken); //关闭GDI+
- }
- BOOL CTestDevCaptureDlg::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- // 将“关于...”菜单项添加到系统菜单中。
- // IDM_ABOUTBOX 必须在系统命令范围内。
- 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);
- }
- }
- // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
- // 执行此操作
- SetIcon(m_hIcon, TRUE); // 设置大图标
- SetIcon(m_hIcon, FALSE); // 设置小图标
- // TODO: 在此添加额外的初始化代码
- GdiplusStartup(&m_GdiplusToken, &gdiStartInput, NULL); //开启GDI+
- ImgFolderPath=GetExePath() + _T("\\Image");
- if(!PathIsDirectory(ImgFolderPath))
- ::CreateDirectory(ImgFolderPath,false);
- FileArry.RemoveAll(); //清空全部
- DWORD dwStyle;
- dwStyle = m_list.GetExtendedStyle();
- dwStyle = dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_SUBITEMIMAGES|LVS_EX_CHECKBOXES|LVS_ALIGNTOP ;
- m_list.SetExtendedStyle(dwStyle);
- CRect mRect;
- GetDlgItem(IDC_LIST1)->GetWindowRect(&mRect);
- int length = mRect.right-mRect.left;
- if(length<pPreviewW)
- {
- pPreviewW=length-edgeSapce*2-16;
- if(pPreviewW<=0)
- pPreviewW=length;
- }
- if(FileArry.GetSize()==0 )
- {
- m_imList.DeleteImageList();
- m_imList.Create(pPreviewW,pPreviewW,ILC_COLOR24,10,20); // 创建图像序列CImageList对象
- m_list.SetImageList(&m_imList,LVSIL_SMALL); //LVSIL_SMALL LVSIL_NORMAL
- m_list.InsertColumn(0, _T("图像列表"), LVCFMT_CENTER, length,-1);
- }
- cb_format.AddString(L"jpg");
- cb_format.AddString(L"bmp");
- cb_format.AddString(L"png");
- cb_format.AddString(L"tif");
- cb_format.AddString(L"pdf");
- cb_format.SetCurSel(0);
- cb_color.AddString(L"彩色");
- cb_color.AddString(L"灰度");
- cb_color.AddString(L"黑白");
- cb_color.SetCurSel(0);
- cb_dpi.AddString(L"100");
- cb_dpi.AddString(L"200");
- cb_dpi.AddString(L"300");
- cb_dpi.AddString(L"400");
- cb_dpi.AddString(L"500");
- cb_dpi.AddString(L"600");
- cb_dpi.SetCurSel(1);
- SetDpi(1,200);
- ////////////////////////////////////////////////////////////////
- int iRest=-1;
- iRest=toGetCamInfo();
- if(iRest!=0)
- {
- return TRUE;
- }
- else
- {
- iRest=toGetCamResolution();
- }
-
- return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
- }
- void CTestDevCaptureDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialogEx::OnSysCommand(nID, lParam);
- }
- }
- // 如果向对话框添加最小化按钮,则需要下面的代码
- // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
- // 这将由框架自动完成。
- void CTestDevCaptureDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // 用于绘制的设备上下文
- SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
- // 使图标在工作区矩形中居中
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // 绘制图标
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialogEx::OnPaint();
- }
- }
- //当用户拖动最小化窗口时系统调用此函数取得光标
- //显示。
- HCURSOR CTestDevCaptureDlg::OnQueryDragIcon()
- {
- return static_cast<HCURSOR>(m_hIcon);
- }
- //切换摄像头
- void CTestDevCaptureDlg::OnCbnSelchangeCombo1()
- {
- int iRest=-1;
- cb_preRes.ResetContent();
- if(isOpenDevice)
- CloseDevice();
- iRest=toGetCamResolution();
- if(iRest!=0)
- {
- AfxMessageBox(_T("切换摄像头失败!"));
- }
- else
- {
- toOpenDevice();
- }
- }
- //打开设备
- void CTestDevCaptureDlg::OnBnClickedButton1()
- {
- if(cb_devname.GetCount()>0)
- toOpenDevice();
-
- }
- //关闭设备
- void CTestDevCaptureDlg::OnBnClickedButton2()
- {
- isOpenDevice=false;
- CloseDevice();
- CRect rect;
- GetDlgItem(IDC_PICA)->GetWindowRect(&rect);
- ScreenToClient(&rect);
- InvalidateRect(rect);//刷新控件
- }
- //拍照
- void CTestDevCaptureDlg::OnBnClickedButton3()
- {
- SYSTEMTIME st;
- CString strDate,strTime;
- GetLocalTime(&st);
- strDate.Format(_T("%4d%d%d"),st.wYear,st.wMonth,st.wDay);
- strTime.Format(_T("%d%d%d%3d"),st.wHour,st.wMinute,st.wSecond,st.wMilliseconds) ;
- CString suffixStr=_T(".jpg");
- if(cb_format.GetCurSel()==0)
- suffixStr=_T(".jpg");
- if(cb_format.GetCurSel()==1)
- suffixStr=_T(".bmp");
- if(cb_format.GetCurSel()==2)
- suffixStr=_T(".png");
- if(cb_format.GetCurSel()==3)
- suffixStr=_T(".tif");
- if(cb_format.GetCurSel()==4)
- suffixStr=_T(".pdf");
- CString path=ImgFolderPath + _T("\\") + strDate + strTime + suffixStr ;
- CaptureFromStill(UnicodeToAnsi(path.GetBuffer(0)));
- AddToPreview(path);
- }
- //切换分辨率
- void CTestDevCaptureDlg::OnCbnSelchangeCombo2()
- {
- if(isOpenDevice)
- {
- isOpenDevice=false;
- CloseDevice();
- }
- toOpenDevice();
- }
- //设置图片格式
- void CTestDevCaptureDlg::OnCbnSelchangeCombo3()
- {
- SetFormatType(cb_format.GetCurSel());
- }
- //设置色彩模式
- void CTestDevCaptureDlg::OnCbnSelchangeCombo4()
- {
- SetColorType(cb_color.GetCurSel());
- }
- //设置DPI
- void CTestDevCaptureDlg::OnCbnSelchangeCombo5()
- {
- CString resStr;
- cb_dpi.GetLBText(cb_dpi.GetCurSel(),resStr);
- SetDpi(1,_ttoi(resStr));
- }
- //裁切模式
- void CTestDevCaptureDlg::OnBnClickedRadio1()
- {
- if( ((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck() )
- {
- SetCutType(0);
- }
- }
- void CTestDevCaptureDlg::OnBnClickedRadio2()
- {
- if( ((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck() )
- {
- SetCutType(1);
- }
- }
- void CTestDevCaptureDlg::OnBnClickedRadio3()
- {
- if( ((CButton *)GetDlgItem(IDC_RADIO3))->GetCheck() )
- {
- SetCutType(2);
- }
- }
- //去底色
- void CTestDevCaptureDlg::OnBnClickedCheck2()
- {
- if( ((CButton *)GetDlgItem(IDC_CHECK2))->GetCheck() )
- {
- SetDelBgColor(1);
- }
- else
- {
- SetDelBgColor(0);
- }
- }
- //去黑边
- void CTestDevCaptureDlg::OnBnClickedCheck3()
- {
- if( ((CButton *)GetDlgItem(IDC_CHECK3))->GetCheck() )
- {
- SetDelBlackEdge(1);
- }
- else
- {
- SetDelBlackEdge(0);
- }
- }
- //左旋
- void CTestDevCaptureDlg::OnBnClickedButton4()
- {
- RotateAngle--;
- if (RotateAngle < 0)
- RotateAngle = 3;
- SetRotateAngle(RotateAngle);
- }
- //右旋
- void CTestDevCaptureDlg::OnBnClickedButton7()
- {
- RotateAngle++;
- if (RotateAngle > 3)
- RotateAngle = 0;
- SetRotateAngle(RotateAngle);
- }
- //放大
- void CTestDevCaptureDlg::OnBnClickedButton8()
- {
- ZoomIn();
- }
- //缩小
- void CTestDevCaptureDlg::OnBnClickedButton9()
- {
- ZoomOut();
- }
- //适合大小
- void CTestDevCaptureDlg::OnBnClickedButton10()
- {
- BestSize();
- }
- //1:1
- void CTestDevCaptureDlg::OnBnClickedButton11()
- {
- TrueSize();
- }
- //对焦
- void CTestDevCaptureDlg::OnBnClickedButton12()
- {
- ManualFocus();
- }
- //硬件参数设置
- void CTestDevCaptureDlg::OnBnClickedButton13()
- {
- ShowCameraSettingWindow();
- }
- //条码识别
- void CTestDevCaptureDlg::OnBnClickedButton14()
- {
- char code[512];
- memset(code,'\0',512);
- RecogQrBarCode(0,code);
- CString content(code);
- if(content!=_T(""))
- {
- AfxMessageBox(content);
- }
- else
- {
- AfxMessageBox(L"未识别到条码");
- }
- }
- //二维码识别
- void CTestDevCaptureDlg::OnBnClickedButton15()
- {
- char code[512];
- memset(code,'\0',512);
- RecogQrBarCode(1,code);
- CString content(code);
- if(content!=_T(""))
- {
- AfxMessageBox(content);
- }
- else
- {
- AfxMessageBox(L"未识别到二维码");
- }
- }
- //图片合并测试
- void CTestDevCaptureDlg::OnBnClickedButton16()
- {
- CString path1=GetExePath() + _T("\\test1.jpg");
- CString path2=GetExePath() + _T("\\test2.jpg");
- AddImagePath(UnicodeToAnsi(path1.GetBuffer(0)));
- path1.ReleaseBuffer();
- AddImagePath(UnicodeToAnsi(path2.GetBuffer(0)));
- path2.ReleaseBuffer();
- CString joinPath=GetExePath() + _T("\\joinimg.jpg");
- MergeImages(UnicodeToAnsi(joinPath.GetBuffer(0)),0,5);
- joinPath.ReleaseBuffer();
- AddToPreview(joinPath);
- }
- //PDF合并测试
- void CTestDevCaptureDlg::OnBnClickedButton17()
- {
- CString path1=GetExePath() + _T("\\test1.jpg");
- CString path2=GetExePath() + _T("\\test2.jpg");
- AddImageFileToPDF(UnicodeToAnsi(path1.GetBuffer(0)));
- path1.ReleaseBuffer();
- AddImageFileToPDF(UnicodeToAnsi(path2.GetBuffer(0)));
- path2.ReleaseBuffer();
- CString joinPath=GetExePath() + _T("\\joinpdf.pdf");
- CombineToPDF(UnicodeToAnsi(joinPath.GetBuffer(0)));
- joinPath.ReleaseBuffer();
- AddToPreview(joinPath);
- }
- /***********************************列表操作******************************************/
- // 从内存加载图片,失败返回NULL
- Bitmap* LoadBitmapFromMemory(const void* memory, DWORD size)
- {
- Bitmap* bmp = NULL;
- IStream* stream = NULL;
- if (CreateStreamOnHGlobal(NULL, TRUE, &stream) == S_OK)
- {
- ULARGE_INTEGER uli;
- uli.QuadPart = size;
- stream->SetSize(uli);
- if (stream->Write(memory, size, NULL) == S_OK)
- bmp = ::new Bitmap(stream,FALSE);
- stream->Release();
- }
- return bmp;
- }
- // 从文件加载图片,不独占文件,失败返回NULL
- Bitmap* LoadBitmapFromFile(const TCHAR* file_name)
- {
- Bitmap* bmp = NULL;
- HANDLE file_handle = CreateFile(file_name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
- if (file_handle != INVALID_HANDLE_VALUE)
- {
- DWORD temp = 0;
- DWORD file_size = GetFileSize(file_handle, &temp);
- if (file_size && !temp) // 不处理大于4G的文件
- {
- // 将图片文件读到内存后,再从内存创建Bitmap
- unsigned char* buffer = new unsigned char[file_size];
- if (ReadFile(file_handle, buffer, file_size, &temp, NULL))
- bmp = LoadBitmapFromMemory(buffer, temp);
- delete [] buffer;
- }
- CloseHandle(file_handle);
- }
- return bmp;
- }
- Bitmap* CTestDevCaptureDlg::toGetThumbnailBitmap(CString path)
- {
- CString prewPath=path;
- CString ImageFormat=prewPath.Right(3);
- if(ImageFormat=="pdf" || ImageFormat=="PDF")
- {
- //isPdf=true;
- prewPath = GetExePath() + _T("\\PdfLogo.bmp");
- }
- Bitmap *bmp;
- bmp=LoadBitmapFromFile(prewPath.GetBuffer(0));
- if(bmp->GetWidth()>=bmp->GetHeight())
- {
- int tbWidth = pPreviewW; //获得图片宽度,这个120和创建的120保持相同。
- int tbHeight = pPreviewW* bmp->GetHeight()/bmp->GetWidth(); //获得图片宽度
- bmp = (Bitmap*)bmp->GetThumbnailImage(tbWidth , tbHeight , NULL, NULL); //设定缩略图的大小
- }
- else
- {
- int tbHeight = pPreviewW; //获得图片宽度,这个120和创建的120保持相同。
- int tbWidth = pPreviewW* bmp->GetWidth()/bmp->GetHeight(); //获得图片宽度
- bmp = (Bitmap*)bmp->GetThumbnailImage(tbWidth , tbHeight , NULL, NULL); //设定缩略图的大小
- }
-
- Bitmap *AllBmp;
- AllBmp=::new Bitmap(pPreviewW,pPreviewW,PixelFormat24bppRGB);
- Pen mpen(Color::DarkGray,2);
- int startx=(pPreviewW-bmp->GetWidth())/2;
- int starty=(pPreviewW-bmp->GetHeight())/2;
- Graphics *myGraphics=NULL;
- myGraphics = Graphics::FromImage(AllBmp);
- myGraphics->Clear((ARGB)Color::White);
- myGraphics->DrawRectangle(&mpen,0,0,pPreviewW,pPreviewW);
- myGraphics->DrawImage(bmp,startx+2,starty+2,bmp->GetWidth()-4,bmp->GetHeight()-4);
- myGraphics->~Graphics();
- myGraphics=NULL;
- delete bmp;
- bmp=NULL;
-
- return AllBmp;
- }
- void CTestDevCaptureDlg::AddToPreview(CString fPath)
- {
- FileArry.Add(fPath);
- pIndex=FileArry.GetSize()-1;
-
- HBITMAP hBitmap;
- CBitmap *pBitmap;
- pBitmap = new CBitmap;
- Bitmap *LastBmp=toGetThumbnailBitmap(fPath);
- LastBmp->GetHBITMAP(NULL, &hBitmap);
- pBitmap->Attach(hBitmap);
- m_imList.Add(pBitmap,RGB(255,255,255));
- LastBmp->~Bitmap();
- LastBmp=NULL;
- delete pBitmap;
- pBitmap=NULL;
-
- int nRow;
- LVITEM lvItem={0};
- lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE; //文字、图片、状态
- lvItem.iItem = pIndex; //行号
- lvItem.iImage = pIndex; //图片索引号
- lvItem.iSubItem = 0; //子列号
- nRow = m_list.InsertItem(&lvItem); //第一列为图片
- m_list.EnsureVisible(pIndex,FALSE);
- }
- void CTestDevCaptureDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
- {
- LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
- NM_LISTVIEW *pNMListView=(NM_LISTVIEW *)pNMHDR;
- int nItem=pNMListView->iItem;
- if(nItem>=0 && nItem<m_list.GetItemCount())//判断双击位置是否在有数据的列表项上面
- {
- CString fpath=FileArry.GetAt(nItem);
- if(PathFileExists(fpath))
- ShellExecute(NULL,L"open",fpath ,NULL,NULL, SW_SHOWNORMAL);
- }
- *pResult = 0;
- }
- //全选/全不选
- bool isSelectAll=false;
- void CTestDevCaptureDlg::OnBnClickedButton6()
- {
- int count=FileArry.GetSize();
- if(count<0)
- return ;
- if(isSelectAll==false)
- {
- isSelectAll=true;
- for(int i=0;i<FileArry.GetSize();i++)
- {
- m_list.SetCheck(i,TRUE);
- m_list.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
- }
- }
- else
- {
- isSelectAll=false;
- for(int i=0;i<FileArry.GetSize();i++)
- {
- m_list.SetCheck(i,FALSE);
- m_list.SetItemState(i, 0, LVIS_SELECTED);
- }
- }
- }
- //删除
- void CTestDevCaptureDlg::OnBnClickedButton5()
- {
- CArray<int> deleteIndex;
- for(int i=0;i<FileArry.GetSize();i++)
- {
- BOOL isSelect=m_list.GetCheck(i);
- if(isSelect==TRUE)
- {
- deleteIndex.Add(i);
- }
- }
-
- if(deleteIndex.GetSize()<=0)
- return ;
- for(int i=deleteIndex.GetSize()-1;i>-1;i--)
- {
- m_list.DeleteItem(deleteIndex.GetAt(i));
- m_imList.Remove(deleteIndex.GetAt(i));
- CString fPath=FileArry.GetAt(deleteIndex.GetAt(i));
- if(PathFileExists(fPath))
- {
- DeleteFile(fPath);
- }
- FileArry.RemoveAt(deleteIndex.GetAt(i));
- }
- }
- void CTestDevCaptureDlg::OnTimer(UINT_PTR nIDEvent)
- {
- switch(nIDEvent)
- {
- case TIMER1:
- break;
- default:
- break;
- }
- CDialogEx::OnTimer(nIDEvent);
- }
- //读取身份证
- void CTestDevCaptureDlg::OnBnClickedButton18()
- {
- int iRest = ReadCard();
- if (iRest != 0)
- {
- AfxMessageBox(L"读卡失败!");
- }
- else
- {
- CString name = (CString)GeCardInfo(0);
- CString sex = (CString)GeCardInfo(1);
- CString nation = (CString)GeCardInfo(2);
- CString born = (CString)GeCardInfo(3);
- CString address = (CString)GeCardInfo(4);
- CString num = (CString)GeCardInfo(5);
- CString IssuedAt = (CString)GeCardInfo(6);
- CString EffectedDate = (CString)GeCardInfo(7);
- CString ExpiredDate = (CString)GeCardInfo(8);
- CString headImgPath = (CString)GeCardInfo(9);
- CString info = L"姓名:" + name + L"\r\n" +
- L"性别:" + sex + L"\r\n" +
- L"民族:" + nation + L"\r\n" +
- L"出生:" + born + L"\r\n" +
- L"住址:" + address + L"\r\n" +
- L"公民身份号码:" + num + L"\r\n" +
- L"签证机关:" + IssuedAt + L"\r\n" +
- L"有效日期:" + EffectedDate + L"-" + ExpiredDate + L"\r\n" +
- L"证件头像图片路径:" + headImgPath;
- AfxMessageBox(info);
- }
- }
|