⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scandialog.cpp

📁 由visual c++编写的北航一个的指纹识别系统
💻 CPP
字号:
// ScanDialog.cpp : implementation file
//

#include "stdafx.h"
#include "fingerdemo.h"
#include "fingerdll.h"
#include "ScanDialog.h"
#include<vfw.h>
#include <windowsx.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CScanDialog dialog
extern CFingerDemoApp theApp;


CScanDialog::CScanDialog(Scan_Bmp* out,CWnd* pParent /*=NULL*/ )
	: CDialog(CScanDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CScanDialog)
		// NOTE: the ClassWizard will add member initialization here
	outbmp=out;
	//}}AFX_DATA_INIT
}


void CScanDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CScanDialog)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CScanDialog, CDialog)
	//{{AFX_MSG_MAP(CScanDialog)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScanDialog message handlers

BOOL CScanDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
    static int nID = 0;
    int nIndex;
	CWnd* pFrame = GetDlgItem(IDC_SCANFINGER);
	hwndC = capCreateCaptureWindow
                 ("",								//窗口名
                  WS_CHILD | WS_VISIBLE,			//窗口风格
                  -32,								//x
				  -20,							    //y
				  640,								//宽    
				  480,								//高
                  pFrame->m_hWnd,					//父窗口句柄
                  nID++								//窗口标识 
                  );
    for (nIndex = 0; nIndex < 10; nIndex++)
        if( capDriverConnect((HWND)hwndC , (WPARAM)nIndex) )
            break;
    if (!capDriverGetCaps(hwndC,&CapDriverCaps,
                                     sizeof(CapDriverCaps)))
	 {
        memset (&CapDriverCaps, 0, sizeof (CapDriverCaps));
        memset (&CapStatus, 0, sizeof (CapStatus));
    }
    capCaptureGetSetup (hwndC, &CaptureParms,sizeof (CaptureParms));
    CaptureParms.dwRequestMicroSecPerFrame=50000;
    capPreviewRate (hwndC, 66);     // Set the preview rate to 66 milliseconds
	capPreview(hwndC,TRUE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CScanDialog::OnOK() 
{
		// TODO: Add extra validation h
	int i=0,j=0;
    BITMAPINFOHEADER *ih;
    unsigned char *lpBitMapBuf;
	capOverlay(hwndC,FALSE);
	capPreview(hwndC,FALSE);
    capEditCopy(hwndC);//拷入剪切板      //lxy 11.10
    if(OpenClipboard()==NULL)
    {
		MessageBox("不能打开剪切板",NULL,MB_OK);
        return ;
	}
    HANDLE hClipData = ::GetClipboardData(CF_DIB);//以位图方式获得剪切板上的数据,返回句柄.
    lpBitMapBuf=(unsigned char *)GlobalLock(hClipData);
    ih=(BITMAPINFOHEADER *)lpBitMapBuf;
    if(ih->biBitCount!=24)
	{
		MessageBox("请在视频源菜单项下设置24位图象格式(Image Format)!","错误",MB_OK);
        CloseClipboard();
        return ;
	}
 /*   ih->biSize	=	sizeof(BITMAPINFOHEADER);
    ih->biWidth   =  IMAGEHEIGHT;
    ih->biHeight  =  IMAGEWIDTH ;
 */  
	unsigned char * tempLp1 , *tempLp2,*ih256;
	ih256=(unsigned char*)GlobalAlloc(GMEM_FIXED,ih->biWidth*ih->biHeight);
   	tempLp2=ih256;
	tempLp1=lpBitMapBuf+40;
    for(  i=0;i<ih->biWidth;i++)
	{
		for( j=0;j<ih->biHeight;j++) //压缩数据3->1位
		{
			(unsigned char )*tempLp2 = (unsigned char )*tempLp1;
            tempLp2++;
            tempLp1+=3;
		}
	}
  if(!theApp.ChangeBmpSize(ih256,outbmp->m_Bmp_pBmpValue,ih->biWidth,ih->biHeight,outbmp->m_Width,outbmp->m_Height))
		return ;
   GlobalUnlock(hClipData);
   GlobalFree(ih256);
   lpBitMapBuf = NULL;
   CloseClipboard();
   capPreview (hwndC,1);
   outbmp->WriteFile("captemp.bmp");
   CDialog::OnOK();
}
BOOL CScanDialog::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	return CDialog::DestroyWindow();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -