在下利用'AVICAP32.DLL'写视频采集程序,但是,因基础不匝地,所以问题多多!:(
……
const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
const WM_CAP_SAVEDIB = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
const WM_CAP_SEQUENCE = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
const WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START+ 42);
……
SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
……
现欲设置采集图象的大小,不知如何处理!请熟悉视频采集的道兄们赐教!
一有答案,即刻揭贴!!!3X
……
const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
const WM_CAP_SAVEDIB = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
const WM_CAP_SEQUENCE = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
const WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START+ 42);
……
SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
……
现欲设置采集图象的大小,不知如何处理!请熟悉视频采集的道兄们赐教!
一有答案,即刻揭贴!!!3X
解决方案 »
- 谁有方法用汇编直接读取硬盘物理序列号?高分相送
- 怎么在dll中声明全局变量?
- 怎样释放DLL中的MDI窗体比较好
- 高分求教!有关在SQL数据库中存储图片的方法。
- 100分的面瓜问题,大家抢啊!(关于txt文件内纪录的操作)
- delphi使用clientDataSet点击查询出现operation not applicable对话框
- 请高手指教DELPHI里面操作WORD的问题
- 请教关于李维的《Delphi5.x分布式多层应用系统篇》中问题
- ado的最新版本是多少?哪里有下载?
- 请问各位,在DELPHI开发中一般用到DELPHI中的哪些技技术???
- ok,搞定视频叠加,散分,顺便求段代码~
- 三层,往一个数据表的数据插入记录
hWndC := capCreateCaptureWindowA('Vidcap',
WS_CHILD or WS_VISIBLE , //窗口样式
Panel1.Left, //X坐标
Panel1.Top, //Y坐标
Panel1.Width, //窗口宽
Panel1.Height, //窗口高
FrmVedioCap.Handle, //窗口句柄
0);
handle_integer:=SendMessage(hwndc, WM_CAP_DRIVER_CONNECT, 0, 0);
但是,设置的是窗口的大小而不是采集的图象的大小!
我是想如何调出视频格式设置对话框,
就象SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
调出视频源对话框一样!
因为我前不久才做了视频抓图和录象的代码
写出来大家共享
================================
首先
用capCreateCaptureWindowA创建句柄
var
ghCapWnd:HWND;function capCreateCaptureWindowA(lpszwindowname:pchar;dstyle:longint;x:integer;y:integer;nwidth:integer;
Nheight:integer;parentwin:HWND;nid:integer):HWND; stdcall external 'AVICAP32.dll';
///
function StartCap(VideoWind:TPanel):boolean;export;
begin
StartCap := false;
ghCapWnd:=CapCreateCaptureWindowA(Pchar('QingHuntSoft'),
WS_CHILD or WS_VISIBLE,
0,
0,
VideoWind.Width,
VideoWind.Height,
VideoWind.Handle,
10);
if ghCapWnd<>0 then
try
SendMessage(ghcapwnd,WM_CAP_DRIVER_CONNECT,0,0);
sendmessage(ghcapwnd,WM_CAP_SET_SCALE,1,1);
sendmessage(ghcapwnd,WM_CAP_SET_PREVIEWRATE,1,1);
sendmessage(ghcapwnd,WM_CAP_SET_OVERLAY,1,0);
sendmessage(ghcapwnd,WM_CAP_SET_PREVIEW,1,1);
StartCap := true;
Except
StartCap := false;
Abort;
end;
end;
========================================
开始录象
procedure SaveCap(SavePath:string);export;
var
Year, Month, Day, Hour, Min, Sec, MSec: Word;
CapParms: PCaptureParms;
Present: TDateTime;
PathStr,MM,DD,HH:string;
CapFileName:String;
begin
CapFileName:='Movie.Avi';
if GhcapWnd<>0 then
begin
CapCaptureGetSetup(ghCapWnd,CapParms,sizeof(TCAPTUREPARMS));
CapParms.fLimitEnabled := false;
CapParms.fYield := TRUE;
CapParms.vKeyAbort := VK_ESCAPE;
CapParms.fAbortLeftMouse := FALSE;
CapParms.fAbortRightMouse := FALSE;
CapCaptureSetSetup(ghCapWnd,CapParms,sizeof(TCAPTUREPARMS));
sendmessage(ghcapwnd,WM_CAP_FILE_SET_CAPTURE_FILE,0,Longint(Pchar(PathStr+'\'+Capfilename)));
sendmessage(ghcapwnd,WM_CAP_SEQUENCE,0,0);
end;
end;
抓图
rocedure SaveCapImage(path:string);export;
begin
if ghCapWnd<>0 then
begin
Sendmessage(ghCapWnd,WM_CAP_FILE_SAVEDIB,0,Longint(Pchar(path)));
end;
end;
两种感觉差不多
但是好像dspack要简单些