关于抓屏的问题(50分)

  • 主题发起人 主题发起人 wanind
  • 开始时间 开始时间
W

wanind

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FormCreate(Sender: TObject);
begin
fscreen := tbitmap.Create; //创建一个bitmap来存放图像
fscreen.Height := screen.Height;
fscreen.Width := screen.Width;
dc := getdc(0); //取得屏幕的dc,参数0表示表示是屏幕
fscreencanvas := tcanvas.Create; //创建画布
fscreencanvas.Handle := dc;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
fscreen.Canvas.CopyRect(rect(0, 0, screen.Width div 2, screen.Height div 2), fscreencanvas, rect(0, 0, screen.Width div 2, screen.Height div 2));
fscreen.SaveToFile('d:/temp/test1.bmp');//抓取屏幕左上部分保存
fscreen.Canvas.CopyRect(rect(screen.Width div 2, 0, screen.Width, screen.Height div 2), fscreencanvas, rect(screen.Width div 2, 0, screen.Width, screen.Height div 2));
fscreen.SaveToFile('d:/temp/test2.bmp');//抓取屏幕右上部分保存
各位大侠看看这样写对不对。我是想实现分别抓取屏幕的左上和右上部分保存的,但是现在保存的左上部分的时候是对的,而保存的屏幕右上部分的图形确实把屏幕的整个上半部分抓取保存了,请问应该怎么解决。
 
只要坐标对了,就对了!
 
用 bitblt 函数吧,资料比较多,建议下载大富翁论坛离线离线资料包
procedure SaveSceenToFile(Sender: TForm; filename: string);
var
bmp: TBitmap;
DC: HDC;
begin
bmp:=TBitmap.Create;
dc:=getDC(Sender.Handle);
bmp.Height:=Sender.ClientHeight;
bmp.Width:=Sender.ClientWidth;
bitblt(bmp.Canvas.Handle, 0,0, bmp.Width, bmp.Height, DC, 0,0);
bmp.SaveToFile(filename);
bmp.Free;
ReleaseDC(Sender.Handle, DC);
end;
 
你的图设置的和屏幕一样大.
你把左上部分抓下来,贴到位图的左上,
右上你也抓下来了,贴到图的右上.
两半部分合起来正好是屏幕的上半部分.
procedure TForm1.FormCreate(Sender: TObject);
begin
fscreen := tbitmap.Create; //创建一个bitmap来存放图像
fscreen.Height := screen.Height div 2;
fscreen.Width := screen.Width div 2;
dc := getdc(0); //取得屏幕的dc,参数0表示表示是屏幕
fscreencanvas := tcanvas.Create; //创建画布
fscreencanvas.Handle := dc;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
fscreen.Canvas.CopyRect(rect(0, 0, screen.Width div 2, screen.Height div 2), fscreencanvas, rect(0, 0, screen.Width div 2, screen.Height div 2));
fscreen.SaveToFile('d:/temp/test1.bmp');//抓取屏幕左上部分保存
fscreen.Canvas.CopyRect(rect(0, 0, screen.Width div 2, screen.Height div 2), fscreencanvas, rect(screen.Width div 2, 0, screen.Width, screen.Height div 2));
fscreen.SaveToFile('d:/temp/test2.bmp');//抓取屏幕右上部分保存
 
感谢大家,结贴了
 
后退
顶部