Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:48

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: glBitmap.pas mal wieder :)
BeitragVerfasst: So Dez 11, 2005 12:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
ich hab einige threads zu der bitmap.pas gelesen, aber mein anliegen leider nicht gefunden - auch google hat mir nicht viel weiter geholfen...

es geht um's texturen laden aus einer dll-datei... in .res dateien wollte ich sie nicht stecken, weil die in die exe mit rein kommen und lose in ordnern sollen sie auch nicht rumfliegen

in ein TImage hab ich's geschafft zu laden
h := LoadLibrary('lemon.dll');
picture.Bitmap.LoadFromResourceID(h,105);

mein programm funktionierte mit der textures.pas, jetzt wollte ich wegen der dll auf glbitmap umsteigen und frage mich, wie ich das laden aus der dll anstelle...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 11, 2005 18:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde sagen, du lädst das Bild erstmal in ein TBitmap und benutzt dann die glBitmap2d Methode AssignFromBitmap oder so ähnlich (hab das gerade nicht im Kopf).

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 01:31 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie steckt man denn Bilder in ne DLL? Kenn mich damit net aus, bin aber hoch interessiert. 8)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 09:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Sage mal. Lädst du die Bilder in der DLL und übergibst diese dann nur an die Anwendung oder lädst du sie Immer aus der Hauptanwendung? Wenn immer aus der Hauptanwendung, dann wundert es mich, dass es auch mit der Textures klappt. Denn bei der kann man genau so wenig eine Instanz angeben wie bei mir. Und somit dürftest du eigentlich auch nicht direkt aus einer DLL laden können. Also bei beiden.

Wenn du sie aus der DLL lädst, dann ist das klar. In benutze die dglOpenGL und in der DLL ist die dann noch nicht initialisiert worden. Auch wenns in der Anwendung bereits so getan ist. In der DLL müsste das rein theoretisch noch mal gemacht werden. Allerdings bekommst du so ohne weiteres den RC nicht in die die DLL.

Als andere Alternative könntest du auch hergehen und einen TResourceStream erstellen bei dem du DLL Handle und Resourcenamen angeben kannst. Und bei der glBitmap kannst du dann LoadFromStream aufrufen. Das mache ich zwar intern in LoadFromResource zwar schon aber halt nur das Handle der Anwendung.

Flash: Ach ja. Bilder in DLLs sind ganz normale Resourcen wie auch in der Exe nur halt in einer DLL. Solche ResourceDLLs haben zu meist auch keinen Code und werden vermehrt für austauschbare Inhalte (Skins, Sprachen etc.) verwendet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 15:33 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wo kann man denn mehr darüber lesen? Wie ich die verpacke und wie ich die (am besten mit deinem Loader) wieder rausgriege. Ich würde gern die PBM-Bilder verpacken...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 15:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wasn PBM? Du meinst BMP, oder?

Also ich benutze zum Resourcen erstellen den PE Resource Explorer. Damit kannst du eine *.res erstellen und die kannst du dann mit {$R blub.res} in deine DLL oder EXE einbinden. Und mit LoadFromResource kannst du diese (meistens) wieder laden und benutzen. Außer die von mir angesprochene Barriere zwischen DLL und Echse. Also, dass du da so einfach nicht die Daten laden kannst.

Aber das ist eigentlich gar nicht doof. Werde das noch mal testen.

PS: Wenn das alles so funktioniert wie ich mir das denke dann spielt das Format welches du laden möchtest keine Rolle mehr. Also dann kannst du auch PNGs benutzen. Die sind wenigstens kleiner.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 16:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hmmm. Hab gerade mal was mit Resourcen getestet. Also Momentan muss ich ehrlich gestehen, dass LoadFromResource (ID) so wie es eingebaut ist nicht sinnvoll funktionieren kann. So wie ich das derzeit gesehen habe wird dort die Dateiendung als Resourcentyp eingebunden und das kann man auch nicht ändern sondern muss sich damit abfinden. Zusätzlich gibt es noch reichlich andere Resourcentypen. Wo sich natürlich auch wieder Bilder hinter verstecken können.

Wenn man aber einen ResourceStream erstellt und aus diesem herraus das Bild lädt. Also LoadFromStream, dann klappt es. Also bis ich da etwas gemacht habe bitte erst diese Variante benutzen, da man so auch andere Handles angeben kann. Ich denke mal, dass ich da generell ein wenig umstellen darf.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 17:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
während ich mit der textures.pas gearbeitet hab, lagen die bilder alle lose rum
weil ich sie aber in eine dll packen möchte, wollte ich auf deine glbitmap.pas umsteigen
joa, da ahb ich mich wieder ungenau ausgedrückt :oops:
geladen wird aus der hauptanwendung, die dll datei enthält nur die bilder

für die dll hab ich erst eine rc datei geschrieben, die die dateinamen der bilder enthält
dann ist da in /delphi/bin eine datei brcc32.exe oder so, die erstellt aus der rc datei ne res datei und die wird dann in ein dll projekt eingebunden, joa, aber mit dem ressource explorer gehts wahrscheinlich bequemer...

ich probier mal den loadfromstream weg :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 17:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wie gesagt. Das LoadFromStream wird für deinen Fall wohl nicht klappen. Du musst wenn dann mit einem TResourceStream arbeiten wie ich das in LoadFromStream mache. Ich muss mal schauen ob ich heute sinnvoll dazu komme anderenfalls poste ich morgen mein Code wie es derzeit erst einmal gehen sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 17:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
oops, nicht aufgepasst... die ganzen streams machen mich noch kirre...

h := LoadLibrary('lemon.dll');
myStream := TResourceStream.CreateFromID(h,105,RT_RCDATA);

wäre das richtig? für tga bilder gibbet glaub ich keinen typ, also RT_BITMAP aber kein RT_TGA
naja, jedenfalls steigt er bei mir jetzt mit ner zugriffsverletzung aus und verweigert den dienst... :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 18:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja das habe ich bis vorhin auch gedacht. Aber als Typ kannst du auch 'TGA' angeben. Der Resource Explorer nimmt zum beispiel die Dateiendung (besser alles ab dem eresten punkt) und macht daraus den Typen. Die Textures macht es wohl auch so. Muss ehrlich gestehen, dass die neuen Kenntnisse mich auch ein wenig aus der Bahn geworfen haben. Ich werde zusehen, dass ich mir verschiedene Tools mal anscheuen und mal schaue was dabei raus kommt.

Ich würde dir auch erst einmal raten die Texturen aus einem Verzeichnis her zu laden, bis jemand (oder ich) dir mehr sagen können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 12, 2005 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
alles klar, dann lade ich erst mal weiter aus dateien und harre deiner erklärung :)

Danke für die Mühen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 13, 2005 00:14 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich melde auch Interesse an.

@Lossy: Du könntest ja mal ein Tutorial draus machen (oder eine "Wiki-Anleitung"): "Gepackte Bilder laden mit glBitmap.pas"

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 13, 2005 09:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ein Tutorial fände ich dafür jetzt erst einmal ein bisschen übertrieben. Bzw wäre es wenn dann dafür ein wenig zu speziell. Schließlich handelt es sich lediglich um ganz normale Resourcen. Ob sie nun in einer DLL oder der EXE stecken spielt keine Rolle. Außerdem ein kleiner Hinweis. Die Bilder werden nicht gepackt. Sie werden 1:1 in die Resource übernommen. Sprich, wenn du ein BMP verwendest ist es hinterher immer noch genau so groß wie als wenn es auf der Platte liegt. Je nachdem ob Windows auf Dumme Ideen kommt könnte es sein, dass er die Resourcen in den Speicher lädt um sie zu cachen. Dann hast sie auf einmal doppelt im Speicher.

Also wenn überhaupt könnte man da nen Artikel drauß machen. Muss aber gestehen, dass meine Zeit ein wenig zu knapp dafür ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 14, 2005 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Au Backe. Ich habe mir das mal angeschaut und da tun sich mir gerade Abgründe auf. :evil:

Kleiner Exkurz zum Thema Resourcen. Die meisten Tools gehen her sobald eine Datei importiert wird und benutzen deren Endung (besser alles ab dem ersten Punkt) als Typ. Aus einer Datei "Blah.png" wird also eine Resource namens 'BLAH' mit dem Typen 'PNG'. In manchen Programmen kann man den Typen allerdings noch ändern. Aber im Endeffekt hat der Typ nichts mit unserer eigentlichen Datei zu tun. Neben diesen Texttypen gibt es noch Standardtypen diese werden intern durch Zahlen gekennzeichnet. Dabei gibt es auch einen spezielle Typ Bitmap. Bescheidener Weise sind das keine echte Windowsbitmaps sondern man hat aus Platzgründen ein stückchen Header weggelassen. Wenn man bei einem TBitmap LoadFromResource aufruft sollte das eigentlich gehen.

Was kann man jetzt tun um eine Resource in die glBitmap zu laden. So lange es sich um eine Resource handel die keine BitmapResource ist kann man einen TResourceStream erstellen und von diesem das Bild laden. Denke mal, dass ich das später noch mit in die Schnittstelle einbauen werde.
Code:
  1.   Res := TResourceStream.Create(HInstance, 'FACE', 'PNG');
  2.   try
  3.     FQuadTex.LoadFromStream(Res);
  4.   finally
  5.     Res.Free;
  6.   end;

Das sollte vollkommen genügen. Für reine Bitmaptypen muss man wohl einen Umweg über ein TBitmap machen. Das werde ich aber später nicht ermöglichen, da das einfach nicht reinpasst und viel zu speziell ist. Ach ja. Durch das Übergeben eines DLL Handles anstelle von HInstance sollte man in der Lage sein ein Bild aus einer geladenen DLL zu laden. Das wars dann eigentlich schon.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]