怎样做高效率的抓屏程序?(100分)

procedure GetScreen(var bmp: TBitmap);
var
dc : integer;
c : TCanvas;
R : TRect;
begin
bmp := TBitmap.Create;

dc := GetWindowDC(0);
try
c := TCanvas.Create;
c.Handle := dc;
R := Rect(0, 0, Screen.Width, Screen.Height);
bmp.Width := R.Right;
bmp.Height := R.Bottom;
bmp.Canvas.CopyRect(R, c, R);
c.Handle := 0;
c.Free;
finally
ReleaseDC(0, dc);
end;
end;
这是最简单的抓全屏的例子, 如果想抓获一个活动窗体, 可以先用GetForegroundWindow
函数得到当前活动窗口的句柄, 得到它的DC, 边界, 然后在CopyRect.
 
"高效"是如何定义的?
可以说,用GDI的方法不太高效,用DDRAW的方法可能效率要高
一些.但是用DDRAW也有不同的做法,各有用处,在不同的地方
各方法效率也不同.
 
你可以参考 snag it 的原程序, 你在 yahoo 上用 snagit&source搜一下
我原来有一份的,不过现在不知哪去了.
资源占用率很低,激活也相当的快.
("高效"是指这两点吧,我猜)
 
我找不到SnagIt的SourceCode啊?Snagit是收费软件,会提供Source code吗?哪位有请通知我!
 

Similar threads

S
回复
0
查看
763
SUNSTONE的Delphi笔记
S
S
回复
0
查看
701
SUNSTONE的Delphi笔记
S
顶部