怎么实现快速(1秒24张图)抓屏,同时cpu的占有率还不能太高,直接访问显存吗?(100分)

  • 主题发起人 主题发起人 liujh
  • 开始时间 开始时间
L

liujh

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要实现将屏幕录制成avi,我想应该是连续抓屏吧,再将取到的数据压缩做成avi吧。怎么实现啊?我做了个实验,使用GetWindowDC,取得Scrren的Handle,然后创建Canvas,
Canvas.Handle := 得到的ScrrenDC的Handle,再创建bmp,然后CopyRect,结果用了1秒钟,太慢了。有什么好的方法吗?
 
怎么没人回啊,一定有人知道,高手快来帮我啊,分不够可以再加啊。
 
你是想做录制软件吧,其实不用1秒钟24张,有变化的时候再抓就可以.
 
用Bitblt函数
 
我有个老外写的抓图控件 速度很快 给你参考一下?
 
给我一份抓图控件 ,xmj@zzti.edu.cn
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
bmp: TBitmap;
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

bmp := TBitmap.Create;
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;

end;


procedure TForm1.FormDestroy(Sender: TObject);
begin

freeandnil(bmp);
end;


procedure TForm1.Button1Click(Sender: TObject);

var

i, b: integer;
dc: hdc;
begin

dc := GetDC(0);
b := GetTickCount;
for i := 0 to 9do

BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, dc, 0, 0, SRCCOPY);
showmessage(inttostr(GetTickCount - b));
end;


end.


 
用 上面 的 方法 是 错误 的
 
>> hfghfghfg
那种方法一定很慢。。。。(虽然我不知道更快的方法)
 
windows media play的编码器,你去当一个看看,也许有帮助的
 
andy263给我发一份吧
ljh761113@yahoo.com.cn
我用了DelphiX控件,直接读的显存,可还是用了130ms,
 
算了,不搞了
 
不搞了,算了
 
后退
顶部