AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bilder aus einer externen Datei laden
Thema durchsuchen
Ansicht
Themen-Optionen

Bilder aus einer externen Datei laden

Ein Thema von Whatever · begonnen am 1. Dez 2009 · letzter Beitrag vom 4. Dez 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Whatever

Registriert seit: 7. Jan 2009
Ort: 127.0.0.1
102 Beiträge
 
#1

Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 13:14
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 13:51
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 14:03
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{$R Datei.res} //"Datei" steht natürlich für den Dateinamen einfügen, sofern die *.res im Projektordner liegt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Whatever

Registriert seit: 7. Jan 2009
Ort: 127.0.0.1
102 Beiträge
 
#4

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 14:20
Vielen Dank erstmal
Ich habe mich jetzt für die DLL entschieden und auch gleich mit dem XN Resource Editor eine .res Datei erstellt und diese in eine DLL compiliert. Jetzt möchte ich gern eine dieser Grafiken aufrufen, was in einer Funktion geschehen soll, die ein TBitmap zurückgibt. Das einzige Problem was ich jetzt noch habe ist, dass die aufgerufene Ressource nicht gefunden wird. Ich vermute, dass ich die Grafik unter einem falschen "Pfad" versuche aufzurufen.

r := TResourceStream.Create(h,Datei,'Bitmap'); Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 14:27
Schau einmal hier: http://delphi.about.com/library/weekly/aa010405a.htm
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 14:32
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Whatever

Registriert seit: 7. Jan 2009
Ort: 127.0.0.1
102 Beiträge
 
#7

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 14:48
Also hiermit möchte ich die Bilder aufrufen:

Delphi-Quellcode:
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;
Von der Struktur her sieht meine DLL so aus:
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#8

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 15:04
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:
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;
Da Objekte als Result oftmals als genzwertig böse angesehn werden, könnte man es auch so machen
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Whatever

Registriert seit: 7. Jan 2009
Ort: 127.0.0.1
102 Beiträge
 
#9

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 15:24
Macht Sinn!
Dankeschön!
Ich bekomme allerdings beim Aufrufen eine Zugriffsverletzung....
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#10

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 15:43
Hast du die res-Datei über ein Resourcenscript (.rc) erzeugt? Wenn ja, hast du einen Fehler in deiner Struktur:

Zitat:
Bitmap-1 -1.bmp
-2 -2.bmp
-3 -3.bmp
erste Name, dann Typ, dann Dateiname:

Code:
1 BITMAP 1.bmp
2 BITMAP 2.bmp
etc...
EDIT: Hab überlesen das du XN Resource Editor verwendest...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 04:23 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