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!
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
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;
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‘);
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]