📄 scandialog.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 + -