//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include <vfw.h>
#include <clipbrd.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
HWND ghCapWnd=NULL; //¶¨Òå²¶»ñ´°¾ä±ú
HWND ghParentWnd=NULL; //
LPVIDEOHDR VideoStr ; //¿ÉÒԵõ½ÊÓÆµÊý¾ÝÖ¸ÕëµÄ½á¹¹±äÁ¿£¬ÓÃÓڻص÷º¯ÊýÖÐ
CAPTUREPARMS CapParms; //ÓÃÓÚÉèÖÃÉ豸ÊôÐԵĽṹ±äÁ¿
CAPDRIVERCAPS gCapDriverCaps;
CAPSTATUS gCapStatus;
Graphics::TBitmap *sBitmap=new Graphics::TBitmap;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenVideoClick(TObject *Sender)
{
int ok;
ghParentWnd=gCapVideoArea->Handle;
ghCapWnd=capCreateCaptureWindow(PChar("ÊÓÆµ²¶×½"), //²¶»ñ´°¿ÚµÄÃû×Ö
WS_CHILD|WS_VISIBLE, //´°¿ÚÑùʽ
0, //X×ø±ê
0, //Y×ø±ê
gCapVideoArea->Width, //´°¿Ú¿í
gCapVideoArea->Height, //´°¿Ú¸ß
ghParentWnd, //´°¿Ú¾ä±ú
0); //Ò»°ãΪ0
ok=capDriverConnect(ghCapWnd,0); //½«Ò»¸ö²¶»ñ´°¿ÚÓëÒ»¸öÉ豸Çý³ÌÏà¹ØÁª£¬µÚ¶þ¸ö
²ÎÊýÊǸöÐòºÅ£¬
//µ±ÏµÍ³ÖÐ×°Óжà¸öÏÔÊÓÇý¶¯³ÌÐòʱ£¬ÆäÖµ·Ö±ðÒÀ
´ÎΪ0µ½×ܸöÊý
Sleep(20);
if(!ok)
{
ShowMessage("ÓëÉ豸Á¬½Óʧ°Ü");
Close();
}
CapParms.dwRequestMicroSecPerFrame=40000; //ÉèÖÃÉ豸ÊôÐԵĽṹ±äÁ¿
CapParms.fLimitEnabled=false;
CapParms.fCaptureAudio=false; // NO Audio
CapParms.fMCIControl=false;
CapParms.fYield=true;
CapParms.vKeyAbort=VK_ESCAPE;
CapParms.fAbortLeftMouse=false;
CapParms.fAbortRightMouse=false;
capCaptureSetSetup(ghCapWnd,long(&CapParms),sizeof(CAPTUREPARMS)); //ʹÉèÖÃÉú
Ч
capPreviewScale(ghCapWnd, 1); //ÉèÖÃÔ¤ÀÀʱµÄ±ÈÀý
capPreviewRate(ghCapWnd,20); //ÉèÖÃÔ¤ÀÀʱµÄ֡ƵÂÊ
capOverlay(ghCapWnd, 0); //Ö¸¶¨ÊÇ·ñʹÓõþ¼Óģʽ£¬Ê¹ÓÃΪ1£¬·ñÔòΪ0
capPreview(ghCapWnd, 1);//´ò¿ªÔ¤ÀÀ
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CloseVideoClick(TObject *Sender)
{
capCaptureAbort(ghCapWnd); //Í£Ö¹²¶»ñ
capSetCallbackOnVideoStream(ghCapWnd,NULL);
capDriverDisconnect(ghCapWnd); //½«²¶»ñ´°Í¬Çý¶¯Æ÷¶Ï¿ª
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GetDriverClick(TObject *Sender)
{
char szDeviceName[80]; // driver name
char szDeviceVersion[80]; // driver version
char item[161]; // concatinated string
int i; // counter
for(i=0;i<10;i++)
{
if(capGetDriverDescription(i,szDeviceName,sizeof(szDeviceName),szDeviceVersi
on,sizeof(szDeviceVersion)))
{
strcpy(item, szDeviceName);
strcat(item, " ");
strcat(item, szDeviceVersion);
strcat(item, " ");
DrvList->Lines->Add(item+IntToStr(i));
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditCopyClick(TObject *Sender)
{
capEditCopy(ghCapWnd);
if (Clipboard()->HasFormat(CF_BITMAP))
{
sBitmap->Assign(Clipboard());
Image1->Canvas->Draw(0,0,sBitmap);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete sBitmap;
capCaptureAbort(ghCapWnd);
capSetCallbackOnVideoStream(ghCapWnd,NULL);
capDriverDisconnect(ghCapWnd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveBmpClick(TObject *Sender)
{
AnsiString CurrentFile;
AnsiString Extname=".bmp";
if(SaveDialog1->Execute())
{
CurrentFile=SaveDialog1->FileName;
CurrentFile=CurrentFile+Extname;
sBitmap->SaveToFile(CurrentFile);
}
}
//---------------------------------------------------------------------------
|