最平常的问题,最棘手的难题 (屏幕捕获) ( 积分: 100 )

  • 主题发起人 主题发起人 未来107
  • 开始时间 开始时间

未来107

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我问一个问题 相信大家都会觉得好笑

如何捕获整个屏幕图像?

如果我再加一句,依旧是

如何捕获整个屏幕图像?

你将不会觉得那么好笑:)

我们都知道 捕获屏幕图像 可以如下
bitblt(bmp.canvas.handle,0,0,screen.width,screen.height,ScreenDc,0,0,srccopy);

但是这真的是正确屏幕图像的方法吗?

很平常的问题却是最棘手的问题 ,因为用这种方法与print screen健抓取的图像是有区别的,你会发现bitblt并不能捕获屏幕上的“提示信息(HINT)”.

原因不难发现,出在了ScreenDc上面,换句话说getdc(0)并非整个屏幕的dc,那么该如何取得整个屏幕的真正DC呢?

请高手支招!....
 
如果我问一个问题 相信大家都会觉得好笑

如何捕获整个屏幕图像?

如果我再加一句,依旧是

如何捕获整个屏幕图像?

你将不会觉得那么好笑:)

我们都知道 捕获屏幕图像 可以如下
bitblt(bmp.canvas.handle,0,0,screen.width,screen.height,ScreenDc,0,0,srccopy);

但是这真的是正确屏幕图像的方法吗?

很平常的问题却是最棘手的问题 ,因为用这种方法与print screen健抓取的图像是有区别的,你会发现bitblt并不能捕获屏幕上的“提示信息(HINT)”.

原因不难发现,出在了ScreenDc上面,换句话说getdc(0)并非整个屏幕的dc,那么该如何取得整个屏幕的真正DC呢?

请高手支招!....
 
我有个办法,很傻的:
先记录下剪切版内容
然后模拟按下print screen健
粘贴
最后还原剪切版内容
 
呵呵 对于编程来说 你的方法的确是个很不好的方法
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn1KeyPress(Sender: TObject; var Key: Char);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
fullscreen: tbitmap;
fullscreencanvas: tcanvas;
dc: hdc;
begin
fullscreen := tbitmap.Create;
fullscreen.Width := screen.Width;
fullscreen.Height := screen.Height;
dc := getdc(0);
fullscreencanvas := tcanvas.Create;
fullscreencanvas.Handle := dc;
fullscreen.Canvas.CopyRect(rect(0, 0, screen.width, screen.height),
fullscreencanvas, rect(0, 0, screen.width, screen.height));
fullscreencanvas.Free;
releasedc(0, dc);
image1.Picture.Bitmap := fullscreen;
fullscreen.Free;
end;

procedure TForm1.BitBtn1KeyPress(Sender: TObject; var Key: Char);
begin
BitBtn1Click(bitbtn1)
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
BitBtn1Click(bitbtn1);
//看看有没有Hint
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Hint := 'testtest';
Self.Hint := 'testest';
Image1.ShowHint := true;
Self.ShowHint := true;
end;

end.
 
不错,小弟收下了
 
捕捉来的图片又如何保存呢
 
小弟知道了
if savepicturedialog1.Execute then
image1.Picture.SaveToFile(savepicturedialog1.FileName);
就可以保存捕捉来的图片,呵呵
 
如果你用tcanvas类,加TBITMAP类,正如上面几位说的,很简单,但如果你要使用AIP来捕获,并且要保存的话,你必须了解位图文件格式,这方面不难,有很多C++方面的源码
 
大家不明白我的意思?

Print screen背后调用了什么? 
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
595
import
I
后退
顶部