读书人

视频截图解决思路

发布时间: 2012-12-31 11:57:52 作者: rapoo

视频截图
有一段mkv视频,想取的视频的时间长度,然后根据不同时间的 ,截取几张图,
例如 ,每隔10分钟,从视频截取一张。
请教 例子或者源码
[解决办法]
截:

function PrintWindow(SourceWindow: hwnd; Destination: hdc; nFlags: cardinal): bool; stdcall; external 'user32.dll' name 'PrintWindow'; 
function PrintWindow(SourceWindow: hwnd; Destination: hdc; nFlags: cardinal): bool; stdcall; external 'user32.dll' name 'PrintWindow';<br/>

procedure TForm1.Button2Click(Sender: TObject);
var
bmp : TBitmap;
wnd : cardinal;
rec : TRect;
begin
wnd := FindWindow(nil, '计算器'); // 查找窗口句柄,这里用计算器演示
GetWindowRect(wnd, rec); //获取到计算器窗口的举行
bmp := TBitmap.Create;
try
bmp.Width := rec.Right - rec.Left;
bmp.Height := rec.Bottom - rec.Top;
bmp.PixelFormat := pf24bit;
PrintWindow(wnd, bmp.Canvas.Handle, 0);
bmp.SaveToFile('cao.bmp');
finally
bmp.Free;
end;
end;


使用mediaPlay截的例子;
unit   Unit1; 

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, MPlayer, ExtCtrls, StdCtrls, Menus;



type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

filw1: TMenuItem;

open1: TMenuItem;

close1: TMenuItem;

Button1: TButton;

OpenDialog1: TOpenDialog;

PaintBox1: TPaintBox;

MediaPlayer1: TMediaPlayer;

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure PaintBox1Paint(Sender: TObject);

procedure open1Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private



imgbitmap:TBitmap;

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);

begin

imgbitmap:=TBitmap.Create;

imgbitmap.Height:=200;

imgbitmap.Width:=200;

imgbitmap.Canvas.Rectangle(0,0,200,200);

end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

imgbitmap.Free;

end;



procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

PaintBox1.Canvas.CopyRect(Rect(0,0,200,200),imgbitmap.Canvas,Rect(0,0,200,200));

end;



procedure TForm1.open1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

MediaPlayer1.FileName:=OpenDialog1.FileName;

MediaPlayer1.Open;

MediaPlayer1.Display:=Form1;

MediaPlayer1.DisplayRect:=Rect(10,10,200,200);

end;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

imgbitmap.Canvas.CopyRect(Rect(0,0,200,200),form1.Canvas,Rect(10,10,200,200));

PaintBox1.Invalidate;

imgbitmap.SaveToFile( 'd:\1234567.bmp ');

end;



end.

读书人网 >.NET

热点推荐