Registriert seit: 12. Mai 2009
214 Beiträge
Turbo Delphi für Win32
|
Re: zwei Bitmaps vergleichen
2. Feb 2010, 12:32
Wo fehlt da noch ein inc() ? Ich hätte gesagt, dass die nachfolgende Version eigentlich klappen müsste.. Allerdings ist das nur die Version wo die bei meinem letzten Post angegeben Verbesserungsvorschläge eingearbeitet werden.
Delphi-Quellcode:
function Bitmapcompare(pic1, pic2: Tbitmap; Posx,posy: Integer): Boolean;
var
Pix1, Pix2 : PByte;
y, k, x : Integer;
bytes: Byte;
const
PixelFormatBytes: Array[TPixelFormat] of Byte = ( 0, 0, 0, 1, 0, 2, 3, 4, 0 );
begin
result:=false;
bytes := PixelFormatBytes[pic1.PixelFormat];
if bytes <> PixelFormatBytes[pic2.PixelFormat] then
Exit;
if (bytes = 0) then
Exit; // PixelFormat wird nicht unterstützt ... kannst du dann gerne von mir aus umändern ...
if (pic1.Width < pic2.Width) or (pic1.Height < pic2.Height) then
Exit;
for y := 0 to pic2.Height - 1 do
begin
Pix1 := pic1.Scanline[posy+y];
Pix2 := pic2.Scanline[y];
inc(Pix1, Posx*bytes ); //Verschieben der Zeigerposition beim größeren Bild
for x := 0 to pic2.Width - 1 do
for k := 0 to bytes - 1 do
begin
//VERGLEICH
if pix1^ <> pix2^ then
Exit; // ungleich, verlasse deshalb routine. Result ist in diesem Falle = False ...
inc(Pix1);
inc(pix2);
end;
end;
// wenn wir es bis hierher geschafft haben, dann sind die bilder von (posx, posy) aufwärts gleich
Result := true;
end;
|
|
Zitat
|