Aoe
一般會員
發表:1 回覆:2 積分:0 註冊:2004-05-19
發送簡訊給我
|
引言:
可否附上你的程式碼.. 存檔會造成問題, 可能是你程式撰寫時有些小細節沒考慮到.. 據我所知, 應該是使用USB類的攝影機..會比較吃CPU的資源... 所以..若要降低CPU的負擔..或許可以考慮買張影像擷取卡... 市面上有幾家販售影像擷取卡的公司...價格從幾千到幾萬塊不等... 登昌恆 http://www.upmost.com.tw/
泰洛 http://www.nowa.com.tw/ 你可以參考看看 !! ===========
有興趣,就能進步
===========
//--------------------------------------------------------------------------- #include
#pragma hdrstop
#include
#include "Unit1.h" #include "vfw.h"
#include "jpeg.hpp"
#include //---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "trayicon"
#pragma resource "*.dfm"
TForm1 *Form1;
HWND hCapWnd;
BITMAPINFO bmi;
CAPTUREPARMS CaptureParms;
int y,part,dd,hh,mm,ss,width,height,part_y,a,hh_add;
AnsiString time_file; //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender)
{
width=320;
height=240;
Form1->Width=width 38;
Form1->Height=height 104;
img1->Top=height 50;
CaptureParms.fYield = true;
hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, width, height,Form1->Panel1->Handle, 0 );
bool a = false;
for( int i = 0; i < 10; i )
{
a = capDriverConnect( hCapWnd, i );
if( a ) break;
}
if( !a )
{
ShowMessage("攝影機連接失敗..");
}
capOverlay(hCapWnd, true); //使用hardware overlay使video input directly into framebuffer,使不用CPU resources.
capPreview(hCapWnd,true);
capPreviewScale(hCapWnd,true);
capPreviewRate(hCapWnd, 1000/30);
capGetVideoFormat(hCapWnd, &bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biWidth=width;
bmi.bmiHeader.biHeight=height;
SetWindowPos(hCapWnd, 0, 0, 0, bmi.bmiHeader.biWidth,bmi.bmiHeader.biHeight,0);
Form1->Panel1->ClientHeight=bmi.bmiHeader.biHeight;
Form1->Panel1->ClientWidth=bmi.bmiHeader.biWidth;
capDlgVideoCompression(hCapWnd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, width, height,Form1->Panel1->Handle, 0 );
bool a = false;
for( int i = 0; i < 10; i )
{
a = capDriverConnect( hCapWnd, i );
if( a ) break;
}
if( !a )
{
ShowMessage("攝影機連接失敗..");
}
capOverlay(hCapWnd, true);
capPreview(hCapWnd,true);
capPreviewScale(hCapWnd,true);
capPreviewRate(hCapWnd, 1000/30);
capGetVideoFormat(hCapWnd, &bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biWidth=width;
bmi.bmiHeader.biHeight=height;
SetWindowPos(hCapWnd, 0, 0, 0, bmi.bmiHeader.biWidth,bmi.bmiHeader.biHeight,0);
Form1->Panel1->ClientHeight=bmi.bmiHeader.biHeight;
Form1->Panel1->ClientWidth=bmi.bmiHeader.biWidth;
N3->Enabled=false;
N4->Enabled=true;
Btn1->Enabled=true;
Btn3->Enabled=true;
}
void __fastcall TForm1::N9Click(TObject *Sender)
{
Form1->FormStyle=fsStayOnTop;
N9->Enabled=false;
N10->Enabled=true;
if(N3->Enabled==false)
{
hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, width, height,Form1->Panel1->Handle, 0 );
bool a = false;
for( int i = 0; i < 10; i )
{
a = capDriverConnect( hCapWnd, i );
if( a ) break;
}
if( !a )
{
ShowMessage("攝影機連接失敗..");
}
capPreview(hCapWnd,true);
capPreviewRate(hCapWnd, 1000/30);
capPreviewScale(hCapWnd,true);
capOverlay(hCapWnd, true);
BITMAPINFO bmi;
capGetVideoFormat(hCapWnd, &bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biWidth=width;
bmi.bmiHeader.biHeight=height;
SetWindowPos(hCapWnd, 0, 0, 0, bmi.bmiHeader.biWidth,bmi.bmiHeader.biHeight,0);
Form1->Panel1->ClientHeight=bmi.bmiHeader.biHeight;
Form1->Panel1->ClientWidth=bmi.bmiHeader.biWidth;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N10Click(TObject *Sender)
{
Form1->FormStyle=fsNormal;
N10->Enabled=false;
N9->Enabled=true;
if(N3->Enabled==false)
{
hCapWnd = capCreateCaptureWindow("My Capture Window", WS_CHILD | WS_VISIBLE,0, 0, width, height,Form1->Panel1->Handle, 0 );
bool a = false;
for( int i = 0; i < 10; i )
{
a = capDriverConnect( hCapWnd, i );
if( a ) break;
}
if( !a )
{
ShowMessage("攝影機連接失敗..");
}
capPreview(hCapWnd,true);
capPreviewRate(hCapWnd, 1000/30);
capPreviewScale(hCapWnd,true);
capOverlay(hCapWnd, true);
BITMAPINFO bmi;
capGetVideoFormat(hCapWnd, &bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biWidth=width;
bmi.bmiHeader.biHeight=height;
SetWindowPos(hCapWnd, 0, 0, 0, bmi.bmiHeader.biWidth,bmi.bmiHeader.biHeight,0);
Form1->Panel1->ClientHeight=bmi.bmiHeader.biHeight;
Form1->Panel1->ClientWidth=bmi.bmiHeader.biWidth;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Btn3->Caption=="開始錄影")
{
Form1->Caption="攝影機--現在時間: " Time();
}
if(Btn3->Caption=="停止錄影")
{
if(ss==60)
{
ss=0;
mm ;
if(part==4)part = 0;
else part =1;
a=0;
Timer3->Enabled=true;
Timer4->Enabled=true;
capCaptureStop(hCapWnd);
}
if(mm==60)
{
mm=0;
hh ;
hh_add ;
if(hh_add==2147483647) hh_add=0;
}
if(hh==24)
{
hh=0;
dd ;
if(dd==2147483647) dd=0;
}
Form1->Caption="攝影機--錄影中: " IntToStr(dd) " 天" IntToStr(hh) " 時" IntToStr(mm) " 分" IntToStr(ss) " 秒";
ss ;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn3Click(TObject *Sender)
{
if(Btn3->Caption=="開始錄影")
{
part=0; SaveDialog1->FileName=Now().FormatString("yymmddhhnnss");
if(SaveDialog1->Execute())
{
Application->Minimize();
ShowWindow(Application->Handle, SW_HIDE);
capCaptureGetSetup(hCapWnd,&CaptureParms,sizeof(CAPTUREPARMS));
CaptureParms.fYield = true;
CaptureParms.vKeyAbort = VK_F1;
CaptureParms.fAbortLeftMouse = false;
CaptureParms.fAbortRightMouse = false;
CaptureParms.dwIndexSize = 324000;
capCaptureSetSetup(hCapWnd,&CaptureParms,sizeof(CAPTUREPARMS));
capFileSetCaptureFile(hCapWnd,(SaveDialog1->FileName "_time" part ".avi").c_str());
capCaptureSequence(hCapWnd);
FILE *file;
file=fopen("state.dat","w");
fprintf(file,"%d",part);
fclose(file);
dd=0;
hh=0;
mm=0;
ss=0;
part_y=0;
hh_add=0;
Btn3->Caption="停止錄影";
N1->Enabled=false;
N2->Enabled=false;
N8->Enabled=false;
N11->Enabled=false;
if(Btn2->Enabled==true)
{
Btn2->Enabled=false;
y=1;
}
Btn1->Enabled=false;
}
}
else
{
capCaptureStop(hCapWnd);
Timer3->Enabled=false;
Timer4->Enabled=false;
N1->Enabled=true;
N2->Enabled=true;
N8->Enabled=true;
N11->Enabled=true;
if(y==1)
{
Btn2->Enabled=true;
y=0;
}
Btn1->Enabled=true;
Btn3->Caption="開始錄影";
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
if(a==0)
{
a=1;
}
else
{
Timer4->Enabled=false;
Timer3->Enabled=false;
}
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Timer4Timer(TObject *Sender)
{
FILE *file;
file=fopen("state.dat","w");
fprintf(file,"%d",part);
fclose(file);
capCaptureSetSetup(hCapWnd,&CaptureParms,sizeof(CAPTUREPARMS));
capFileSetCaptureFile(hCapWnd,(SaveDialog1->FileName "_time" part ".avi").c_str());
capCaptureSequence(hCapWnd);
}
//---------------------------------------------------------------------------
發表人 - jerrykuo 於 2005/02/15 12:43:41
|