Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#8

AW: Access violation bei dynamischen Arrays

  Alt 14. Jun 2011, 09:32
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 ...
  Mit Zitat antworten Zitat