hab das ganze nochmal nachgeproggt und festgestellt, dass die scanline-methode doch rasent schnell ist, wenn man nur die
rgb-quads vergleicht.
also wenn ich den code weglasse, der einen gleichen pixel makiert (mit einem definiertem farbton versieht) brauch mein programm nur ca 10-20 ms anstatt 200 ms . kann das sein das das soviel zeit kostet oder hab ich mich verproggt *g*
hier mein code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
bitm1,bitm2:tbitmap;
start,ende,x,y,i,countfalsepixel:integer;
p,p2:PRGBQuad;
begin
bitm1 := tbitmap.Create;
bitm2 := tbitmap.Create;
bitm1.LoadFromFile('
C:\bild1.bmp');
bitm2.LoadFromFile('
C:\bild2.bmp');
bitm1.PixelFormat := pf32bit;
bitm2.PixelFormat := pf32bit;
start:= gettickcount;
for i:=1
to 1000
do
countfalsepixel:=0;
begin
for y := 0
to bitm1.Height - 1
do
begin
P := bitm1.ScanLine[y];
P2 := bitm2.ScanLine[y];
for x := 0
to bitm1.Width - 1
do
begin
if RGB(P^.rgbRed, P^.rgbGreen, P^.rgbBlue) <>
RGB(P2^.rgbRed, P2^.rgbGreen, P2^.rgbBlue)
then Inc(CountFalsePixel);
Inc(P);
Inc(P2);
end;
end;
end;
ende := gettickcount;
bitm1.Free;
bitm2.Free;
showmessage('
falsche pixel:'+inttostr(countfalsepixel)+'
in ms:'+inttostr(ende-start));
end;