![]() |
Bilder aus einer externen Datei laden
Hallo!
Ich habe vor ein kleines Spiel zu schreiben in welchem ich circa 60 Bilddateien benötige. Ich möchte diese nicht unbedingt in einem Ordner im Spielverzeichnes liegen haben, sondern eben in einer externen Datei. Das Problem was sich hierbei stellt ist, dass ich damit noch keine Erfahrungen habe. Also habe ich ein wenig das Netz durchforstet und bin auf Themen wie z.B. Ressourcen-DLLs gestossen. Verwirrend waren allerdings Einträge über .res Dateien, die wohl den selben Zweck erfüllen. Meine Frage ist nun, was wohl für mein Problem am sinnvollsten ist. Grüße |
Re: Bilder aus einer externen Datei laden
du kannst:
die Dateien einfach in einen Stream packen und in 'ner Datei speichern eine ZIP-Komponente verwenden und alles in einer ZIP verpacken Resourcen (in der EXE oder einer DLL) TImageList ... Was für dich am Sinnfollsten ist, kannst du nur selber beantworten, da wir ja nicht alle deine Bedürfnisse kennen. |
Re: Bilder aus einer externen Datei laden
Eine *.res-Datei ist eine Datei, die Deine Ressourcen enthält. Diese kannst Du nun direkt in Deine Exe oder in eine DLL linken, welche Du dann mitliefern müsstest. Dazu musst Du nur im Quellcode Deiner Anwendung bzw. DLL die Zeile
Delphi-Quellcode:
einfügen, sofern die *.res im Projektordner liegt.
{$R Datei.res} //"Datei" steht natürlich für den Dateinamen
|
Re: Bilder aus einer externen Datei laden
Vielen Dank erstmal :thumb:
Ich habe mich jetzt für die DLL entschieden und auch gleich mit dem ![]()
Delphi-Quellcode:
Grüße
r := TResourceStream.Create(h,Datei,'Bitmap');
|
Re: Bilder aus einer externen Datei laden
Schau einmal hier:
![]() |
Re: Bilder aus einer externen Datei laden
es kommt jetzt darauf an, wie du deine Resourcen-Datei erstellt und wie du die DLL eingebunden/geladen hast.
.CreateFromID mit DLL-Handle und ID-des-Bildes .Create mit DLL-Handle und Name-des-Bildes |
Re: Bilder aus einer externen Datei laden
Also hiermit möchte ich die Bilder aufrufen:
Delphi-Quellcode:
Von der Struktur her sieht meine DLL so aus:
function GetCard(CardIndex:String):TBitmap;
var h: Cardinal; r: TResourceStream; b: TBitmap; begin h:= LoadLibrary('CardsDLL.dll'); if h <> 0 then begin r := TResourceStream.Create(h,CardIndex,'Bitmap'); b := TBitmap.Create; try b.LoadFromStream(r); result:= b; finally b.Free; r.Free; FreeLibrary(h) end; end else RaiseLastOSError(); end; Bitmap-1 -1.bmp -2 -2.bmp -3 -3.bmp usw. Falls das gemeint war :) Hab mir das Tutorial mal angesehen, finde darin aber nicht unbedingt die Lösung für mein Problem... aber Danke trotzdem :) |
Re: Bilder aus einer externen Datei laden
b.Free gibt übrigens dein Bitmap frei und der Wert in Result wäre somit ungültig/fehlerhaft
und bei einem fehler wärend der Restelltung des Bitmaps und des Resourcestreams, wäre die DLL nicht wieder entladen wurden. und da du anscheinend Indize in der RES verwendest, würden sich diese auch beim Laden gut machen
Delphi-Quellcode:
Da Objekte als Result oftmals als genzwertig böse angesehn werden, könnte man es auch so machen
function GetCard(CardIndex: Integer): TBitmap;
var h: THandle; r: TResourceStream; begin h := LoadLibrary('CardsDLL.dll'); if h <> 0 then try r := TResourceStream.CreateFromID(h, CardIndex, 'Bitmap'); result := TBitmap.Create; try result.LoadFromStream(r); finally r.Free; end; finally FreeLibrary(h); end; else RaiseLastOSError; end;
Delphi-Quellcode:
procedure GetCard(CardIndex: Integer; Var Bitmap: TBitmap);
var h: THandle; r: TStream; begin h := LoadLibrary('CardsDLL.dll'); if h <> 0 then try r := TResourceStream.CreateFromID(h, CardIndex, 'Bitmap'); try if not Assigned(Bitmap) then Bitmap := TBitmap.Create; Bitmap.LoadFromStream(r); finally r.Free; end; finally FreeLibrary(h); end; else RaiseLastOSError; end; |
Re: Bilder aus einer externen Datei laden
Macht Sinn! :-D
Dankeschön! Ich bekomme allerdings beim Aufrufen eine Zugriffsverletzung.... |
Re: Bilder aus einer externen Datei laden
Hast du die res-Datei über ein Resourcenscript (.rc) erzeugt? Wenn ja, hast du einen Fehler in deiner Struktur:
Zitat:
Code:
EDIT: Hab überlesen das du XN Resource Editor verwendest...
1 BITMAP 1.bmp
2 BITMAP 2.bmp etc... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz