Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#1

Warum brauchen BitBlt und StretchBlt soviel Speicher?

  Alt 20. Okt 2020, 18:31
Gerade bin ich auf eine interessante Sache gestoßen: Wenn ich irgendwo eine Bitmap mit BitBlt oder StretchBlt verwende, wird dafür nochmal die gleiche Größe im Arbeitsspeicher erzeugt, wie die Bitmap selber hat.

Beispiel: Lade ich eine 21.600 x 10.800 große Grafik in mein Programm und habe dabei vorgegeben, dass die Grafik in 100% Größe angezeigt wird (in einer Paintbox - und ich dann für die Anzeige Paintbox.canvas.draw (x,y, Bitmap) verwende), dann braucht mein Programm nur 700 MB Arbeitsspeicher.

Lasse ich das Bild mit Stretchblt in einer anderen skalierten Größe anzeigen (oder auch in 100% aber mit BitBlt die Bitmap auf das Paintbox.handle kopiert), dann werden 1,4 GB Arbeitsspeicher benötigt.
Ich bin da wirklich mit dem Debugger durch, bei Aufruf von StretchBlt erhöht sich die Anzeige im Taskmanager von 700 MB auf 1,4 MB.

Anscheinend legt StretchBlt irgendwie Speicher für diese Bitmap an, gibt ihn nachher aber nicht mehr frei (ein erneuter Aufruf von Stretchblt führt aber nicht zu weiteren Speicherverbräuchen).

Gibt es eine Möglichkeit, diesen verbrauchten Speicher wieder zurückzusetzen?

Ich bin dabei darauf gestoßen, nachdem ich alle Undo-Einstellungen in meinem Programm deaktiviert hatte und trotzdem noch der Doppelte Arbeitsspeicher benötigt wurde, als die Bitmap rein rechnerisch benötigen würde.
  Mit Zitat antworten Zitat