Checken, ob 2 Bmps gleich sind?

Hi!

Ich habe unter Delphi5 zwei TBitmaps, und ich will wissen, ob die gleich sind. Wie kann ich das machen? CompareMem funktioniert nicht immer… DANKE!

Ja, das würd ich auch gerne wissen, das fuchst mich schon ziemlich lange… ich hoff, dass eine gute Antwort darauf eingeht…

Volker

  1. gefunden bei google

begin
MemStream := TMemoryStream.Create;
try
Bmp1.SaveToStream(MemStream);
MemStream.Position := 0;
SetLength(S1, MemStream.Size);
MemStream.Read(S1[1], Length(S1));
MemStream.Clear;
Bmp2.SaveToStream(MemStream);
MemStream.Position := 0;
SetLength(S2, MemStream.Size);
MemStream.Read(S2[1], Length(S2));
finally
MemStream.Free;
end;
if S1 = S2 then
{they are identically};
end;

  1. gefunden bei google

type
TByteArray = Array[0…0] of byte;
.
.
.
procedure Compare (BitMapA,BitMapB: TBitMap);
var
i : Integer;
j : Integer;
PA : ^TByteArray;
PB : ^TByteArray;
begin
TotalUnmatchedPixels := 0;
{ for j := 1 to BitmapA.Height do
begin
for i := 1 to BitmapA.Width do
begin
if BitmapA.Canvas.Pixels[i,j] BitmapB.Canvas.Pixels[i,j] then
Inc(TotalUnmatchedPixels)
end;
end; }
for i := 0 to (BitmapA.Height-1) do
begin
PA := BitmapA.ScanLine[i];
PB := BitmapB.ScanLine[i];
for j := 0 to (BitmapA.Width-1) do
if PA^[j] PB^[j] then
Inc(TotalUnmatchedPixels);
end;
if TotalUnmatchedPixels > 0 then ShowMessage(‚Bitmaps A and B do not match‘)
else ShowMessage(‚Bitmaps A and B do match‘);

  1. imho am cleversten: Prüfsumme berechnen und vergleichen

if S1 = S2 then
{they are identically};

Hallo!
Von welchem Typ sind denn die Vars S1 + S2 ?

Und ich kann mir vorstellen, das die erste methode sehr viel schneller läuft, da das bitmap 1024x768 pixel groß ist, die alle abzulaufen dauert sicher ne weile!

Danke!

aus der Hüfte geschossen String oder array of byte denk ich ;o)

habs selbst weder getestet noch genauer studiert.

Gruss RQ

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]