Da nur 24 Bit Farbtiefe unterstützt wird, sind es nur 16 Millionen Farben.
Das verkraftet der Speicher noch.
Delphi-Quellcode:
// in den Arrays werden keine Farben gespeichert sondern Summen je Farbe
FBild1, FBild2: array of Integer;
idx: Integer;
// FBild1 initialisieren
// BGR 3 Byte x 8 = 24 Bit = 16777216 verschiedene Summen
SetLength(FBild1, 2 shl 24);
// zufälligen Inhalt des Arrays mit 0 löschen
FillChar(FBild1[0], SizeOf(FBild1[0]) * Length(FBild1), #0);
// das ganze noch mal für FBild2
// Größe des Images nicht überschreiten !
for i1 := 0 to Image1.Picture.Height - 1 do
begin
for i2 := 0 to Image1.Picture.Width - 1 do
begin
// nur einmal auf Pixels zugreifen = doppelte Geschwindigkeit
idx := Image1.Picture.Bitmap.Canvas.Pixels[i1,i2];
FBild1[idx] := FBild1[idx] + 1;
//
idx := Image2.Picture.Bitmap.Canvas.Pixels[i1,i2];
FBild2[idx] := FBild2[idx] + 1;
end;
end;
// Stringlisten mit Summen für 16 Millionen Farben füllen ;)
Bei einer Bildauflösung von 1024 * 768 können jetzt so bis ca. 700000 Zeilen im Dialog angezeigt werden ...