AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Bitmaps archivieren und laden?

Bitmaps archivieren und laden?

Ein Thema von Rastaman · begonnen am 26. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#21

Re: Bitmaps archivieren und laden?

  Alt 27. Sep 2007, 17:07
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 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;


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
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#22

Re: Bitmaps archivieren und laden?

  Alt 27. Sep 2007, 18:29
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#23

Re: Bitmaps archivieren und laden?

  Alt 27. Sep 2007, 18:44
Irgendwie versteht keiner das eigentliche Problem
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.
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#24

Re: Bitmaps archivieren und laden?

  Alt 27. Sep 2007, 18:56
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
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#25

Re: Bitmaps archivieren und laden?

  Alt 28. Sep 2007, 10:50
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
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#26

Re: Bitmaps archivieren und laden?

  Alt 28. Sep 2007, 12:01
@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.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#27

Re: Bitmaps archivieren und laden?

  Alt 28. Sep 2007, 15:35
Danke! Das isses
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:47 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