AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmaps im RAM auslagern?

Ein Thema von Pseudemys Nelsoni · begonnen am 21. Dez 2004 · letzter Beitrag vom 21. Dez 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Bitmaps im RAM auslagern?

  Alt 21. Dez 2004, 09:58
hi,

wenn ich ein Array of bitmaps habe und immer wieder bitmaps hinzufüge, sind diese dann im ram gespeichert? ich bekomme nämlich nach ca 80 bitmaps eine Exception "EOutOfResources" aber mein delphi programm verbraucht nur 10mb speicher wenn ich mir das im taskmanager angucke.... krieg ich nicht mehr bilder rein?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Bitmaps im RAM auslagern?

  Alt 21. Dez 2004, 10:00
Zwei Möglichkeiten fallen mir auf Anhieb ein:
1.) falls alle Bitmaps gleiche Größe haben dann nutze statt Bitmaps eine ImageList
2.) rufe Bitmap.Dormant auf um das GDI Handle der Bitmap freizugeben

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Bitmaps im RAM auslagern?

  Alt 21. Dez 2004, 10:11
hallo hagen,

ich habe mich für methode 2 entschieden, nur gibt es da nun ein problem...das ganze ist SEHR langsam, 100 mal langsamer bestimmt als zuvor kann man das nicht irgendwie wieder schneller bekommen? ich hab das gefühl das das sogar laenger dauert als die bilder temporär auf die HD zu packen statt in den Speicher.

wie darf ich mir "Dormant" vorstellen? ich meine was passiert da genau, aus der hilfe bin ich nicht ganz schlau geworden <g>
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Bitmaps im RAM auslagern?

  Alt 21. Dez 2004, 14:17
.Dormant wandelt das Bitmap von einem GDI Object in ein SYSTEM Object um. Das heist im Klartext das dessen Daten nicht im limitierten GDI Speicher liegen sondern im normalen Hauptspeicher des Prozesses. Diese Methode ist langsam da nicht nur der Speicher kopiert wird sondern auch das Format der Pixeldaten sich ändern kann.

Die schnellste Methode ist es eine ImageList zu verwenden wenn da nicht das Problem wäre das ImageList's nur gleichgroße Bitmaps, mit der Farbauflösung des Systems und in beschränkter Größe/Anzahl speichern kann.

Eventuell solltest du mal Bitmap.SaveToStream(MemoryStream) versuchen. Du speichert also die Bitmap temporär in einen MemoryStream. Deine Liste/Array besteht also nur aus TMemoryStream Objecten und erst zur Anzeige wird ein temporäres TBitmap Object aus dem MemoryStream geladen.
Oder du benutzt gleich nur einen einzigsten TMemoryStream in dem nacheinander die Bitmaps gespeichert werden. Dann benötigst du noch eine kleine Liste/Array das die Offsets == MemoryStream.Position zu den einzelnen Bitmaps im Stream speichert.

Exakt dieses Konzept nutze ich bei meiner TPictureList Komponente. Diese kann beliebige Grafik-Formate in einen gemeinsammen MemoryStream verwalten, natürlich mit zusätzlichen Informationen wie ID, Farbanpassungen, Flags für Zeichenoperatonen wie die Ausrichtung -> zentriert, links, rechts, oben, unten, gekachelt, transparent, Hintergrundfarbe usw. usw. Die TPictureList stellt dann Methoden zum Zeichnen dieser Bilder in einen rechteckigem Bereich mit deren Einstellungen zur Verfügung. Die Bilder werden dabei über eine frei zu vergebende aber eindeutige ID ausgewählt. Diese TPictureList lässt sich über einen Editor zur DesignTime mit Bildern füllen, in einem Rutsch in Dateien laden, speichern und in DFM's speichern. Aber egal das dürfte für dich ja über das Ziel hinaus sein.


Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz