Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bitmaps archivieren und laden? (https://www.delphipraxis.net/100350-bitmaps-archivieren-und-laden.html)

Rastaman 27. Sep 2007 17:07

Re: Bitmaps archivieren und laden?
 
Zitat:

Zitat von Luckie
Ich würde da mit einem Inhaltsverzeichnis arbeiten, wie ich es bei meinem SFX-Builder gemacht habe.

Hatte ich auch vor.

Zitat:

Zitat von Luckie
Auch in C++ gibt es Streams. Und wenn du die Funktion SDL_LoadBMP nuicht nutzen kannst, musst du mal gucken, ob es nicht eine gibt, der du einen Stream übergeben kannst.

Nein. Selber schreiben wird schwierig, denn die Funktion füllt diese Struktur

Code:
typedef struct SDL_Surface {
   Uint32 flags;            /* Read-only */
   SDL_PixelFormat *format;      /* Read-only */
   int w, h;            /* Read-only */
   Uint16 pitch;            /* Read-only */
   void *pixels;            /* Read-write */
   int offset;            /* Private */

   /* Hardware-specific surface info */
   struct private_hwdata *hwdata;

   /* clipping information */
   SDL_Rect clip_rect;         /* Read-only */
   Uint32 unused1;            /* for binary compatibility */

   /* Allow recursive locks */
   Uint32 locked;            /* Private */

   /* info for fast blit mapping to other surfaces */
   struct SDL_BlitMap *map;      /* Private */

   /* format version, bumped at every change to invalidate blit maps */
   unsigned int format_version;      /* Private */

   /* Reference count -- used when freeing surface */
   int refcount;            /* Read-mostly */
} SDL_Surface;
:wink:

Zitat:

Zitat von Luckie
Ansonsten ginge noch MSDN-Library durchsuchenCreateFile mit dem Attribut FILE_ATTRIBUTE_TEMPORARY:

Wurde ja schon vorgeschlagen und ich habs auch schon ausprobiert (s.o) aber irgendwie scheint das das Gleiche zu bewirken,
als wenn ich die Datei ganz normal erstelle mit FILE_ATTRIBUTE_NORMAL, denn sie wird einfach in den Ordner der .exe geschrieben (also auf HD, was ich ja eigentlich durch FILE_ATTRIBUTE_TEMPORARY vermeiden möchte (Oder habe ich den Zweck dieses Flags falsch verstanden?)). Oder mach ich was falsch in meinem Versuch oben?

MFG
Rasta

shmia 27. Sep 2007 18:29

Re: Bitmaps archivieren und laden?
 
Du hast zwei grundsätzliche Probleme:
1.) Wenn alle Bitmapdateien ohne Klebstoff zu einer grossen Datei verkettet werden,
dann geht jegliche Information verloren, wo BitmapA aufhört und BitmapB beginnt
(bei strukturierten Bildformaten wie z.B. TIFF könnte man die Grenzen finden)

2.) Natürlich gehen auch alle Informationen über den Namen der Bitmaps verloren
=> du brauchst eine Art FileStruktur in einer einzigen Datei
Es gibt flache Strukturen (z.B. TAR) oder hierarchische Strukturen.
Du kannst dir selbst eine Struktur ausdenken (würde ich nicht empfehlen) oder einen Standard verwenden.

Dein nächstes Problem ist das Laden eines Bitmap aus dem Speicher; in Delphi geht das ganz einfach.
Die eigentliche Laderoutine procedure TBitmap.ReadDIB(Stream: TStream; ImageSize: LongWord) ist sehr komplex.
Wenn also TurboC++ keine vergleichbare Routine (spez. TBitmap.LoadFromStream()) anbietet, dann müsstest du die VCL Teile nach C++ portieren.

Rastaman 27. Sep 2007 18:44

Re: Bitmaps archivieren und laden?
 
Irgendwie versteht keiner das eigentliche Problem :-D
Die Funktion die zum Laden der Bitmap verantwortlich ist erwartet einen Dateinamen.
Ich möchte aber die Bitmaps die ich aus dem Archiv hole NICHT auf Festplatte zwischenspeichern.
Aber mir wird langsam klar, dass ich wohl keine andere Wahl habe.

Sunlight7 27. Sep 2007 18:56

Re: Bitmaps archivieren und laden?
 
Versteh ich wirklich net, ich habe mir mit C++ mal eine DirectX 3.0 Schnittstelle gebastelt, und die Bitmpas via MSDN-Library durchsuchenCreateDIBSection aus den Daten der Datei geladen.

Was hindert Dich daran, das Bitmap erzeugen selber in die Hand zu nehmen?

Edit: Tags vergessen

guidok 28. Sep 2007 10:50

Re: Bitmaps archivieren und laden?
 
Ich glaub ich habs verstanden, aber vielleicht auch nicht ganz...

Du hast eine fertige Funktion SDL_LoadBMP und genau die willst du verwenden und genau die erwartet einen Dateinamen einer Bitmap, den sie von der Platte laden möchte.

Naja, dann ist ja wohl klar, dass diese Funktion auch auf die Platte zugreift. Ich kenne diese Funktion nicht (hab eh übersehen, dass es sich um C++ handelt, da kann ich nicht weiterhelfen), aber anscheinend hast du die nicht selbst gebastelt und bist auch nicht gewillt, dir eine Funktion selbst zu basteln die das Bitmap eben aus einer großen Katalogdatei läd.

Gabs da nicht mal so eine Art RAM-Disk? Vielleicht kannst du dein Bitmap mit einer EIGENEN Funktion aus dem Katalog laden und temporär auf der "RAM-Disk" speichern. Bei SDL_LoadBMP musst du dann halt im Dateipfad (den wird sie ja wohl auch noch erwarten) als Laufwerk die RAM-Disk angeben.

Gruß,

Guido

Lossy eX 28. Sep 2007 12:01

Re: Bitmaps archivieren und laden?
 
@Rastaman: SDL bietet auch eine Funktion namens SDL_LoadBMP_RW. Du kannst mit SDL_RWFromFile (geht auch von C++ FilePointer bzw Mem) ein RWops erstellen in diesem eine Position anwählen und dann problemlos das BMP ab dieser Stelle in deiner Datei laden. Da brauchst du keine temporären Dateien benutzen und verlässt SDL nicht wodurch es automatisch Platformunabhängig bleibt.

PS: Zusätzliche Strukturinfos lassen sich auch problemlos mit dem RWops laden, da du auch einzelne Bytes etc auslesen kannst.

Rastaman 28. Sep 2007 15:35

Re: Bitmaps archivieren und laden?
 
Danke! Das isses :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Seite 3 von 3     123   

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