求助:关于PIXELFORMAT的问题!!!(50分)

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

logpie

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FormCreate(Sender: TObject);
var src:hdc;
begin
image1.Width :=screen.Width ;
image1.height :=screen.height;
image2.Width :=screen.Width ;
image2.height :=screen.height;
src:=getdc(0);
bitblt(image1.Canvas.Handle ,0,0,screen.Width ,screen.Height ,src,0,0,srccopy);
end;

procedure TForm1.Button1Click(Sender: TObject); //逐行比较代码
var x,y,i:integer;
l1,l2:pbytearray;
bm1,bm2:Tbitmap;
begin
image2.Picture.Bitmap.PixelFormat :=pf24bit; //必须设置!
image1.Picture.Bitmap.PixelFormat :=pf24bit;
memo1.Text :='';
for y:=0 to image1.Picture.Bitmap.Height -1 do
begin
l1:=image1.Picture.Bitmap.ScanLine [y];
l2:=image2.Picture.Bitmap.ScanLine [y];
if not comparemem(l1,l2,image1.Picture.Bitmap.Width*3 ) then
begin
memo1.Lines.Add(inttostr(y));
end;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
image2.Refresh;
bitblt(image2.Canvas.Handle ,0,0,screen.Width ,screen.Height ,src,0,0,srccopy);
button1click(sender);
end;
-------------------------------------------------------------------------
在我的比较代码中必须每次比较前设置PIXEELFORMAT=24bit
但是每次设置一次须耗费一段时间,造成明显停顿感.
如果不设置的话根本无法比较

有什么办法可以一劳永逸呢,既设置一次PIXELFOMAT,以后每次截图IMAGE都默认24BIT
而不用重新设置。
或者我还可以怎么做呢?


 

image2.Picture.Bitmap.PixelFormat :=pf24bit
放在FormCreate中行不行?
 
在 form 的 ONCreate 中应该能设置
 
这样子不行,你们试试就知道了,用BITBLT根本就截不到图
IMAGE上什么也没有
 
不要用 IMAGE,直接用 TBITMAP 试试吧
 
那大家看看我的比较代码里,为什么非要设置PIXELFORMAT才能顺利执行?
否则会变得非常非常慢~~~
是不是COMPAREMEM的问题?
 
我觉得不是你说的问题,好像是定时器不停刷新造成的,你可以这样改
if image2.Picture.Bitmap.PixelFormat<>pf24bit then
image2.Picture.Bitmap.PixelFormat :=pf24bit;
if image1.Picture.Bitmap.PixelFormat <>pf24bit then
image1.Picture.Bitmap.PixelFormat :=pf24bit;
这样上面的语句只用执行一次。判断的动作应该很快。如果还是很慢,就说明是其他原因造成的。
 

Similar threads

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