Citat:
// hm, a drugi pixelformati-?
He he, bravo. Prilikom copy-paste-a mi se izgubilo par linija kooda, pa evo popravljena verzija:
Code:
function Diff2(fn1, fn2: string): boolean;
var
b1, b2: TBitmap;
y, bpp: integer;
pix1, pix2: PByteArray;
begin
Result := false;
try
b1 := TBitmap.Create;
b2 := TBitmap.Create;
b1.LoadFromFile(fn1);
b2.LoadFromFile(fn2);
if (b1.Width <> b2.Width) or (b1.Height <> b2.Height) or
(b1.PixelFormat <> b2.PixelFormat) then
begin
Result := true;
exit;
end;
case b1.PixelFormat of
pf8bit: bpp := 1;
pf16bit: bpp := 2;
pf24bit: bpp := 3;
pf32bit: bpp := 4;
else exit;
end;
for y := 0 to b1.Height - 1 do
begin
pix1 := b1.ScanLine[y];
pix2 := b2.ScanLine[y];
if not CompareMem(pix1, pix2, b1.Width * bpp) then
begin
Result := true;
exit;
end;
end;
finally
FreeAndNil(b1);
FreeAndNil(b2);
end;
end;
Naravno, funkcija je i dalje bušna na sve strane (ne podržava sve pixelformate, vraća nekakav rezultat u svakom slučaju, iako poređenje nije uspešno...), ali mislim da se iz ovog može videti ideja.
Citat:
a zar se ne svodi onda to na uporedjivanje fajlova?
Ovo u suštini i jeste poređenje fajlova, s obzirom da se radi o bitmapi (nekompresovanoj). S tim što je bolje porediti ovako (imho) jer se postižu velike uštede u vremenu u očiglednim slučajevima (da su slike različite veličine, recimo).
ss.
When something is hard to do, then it's not worth doing.