AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi PNGs oder Dateien allgemein in EXE einbinden und auslesen

PNGs oder Dateien allgemein in EXE einbinden und auslesen

Ein Thema von entwickler · begonnen am 11. Nov 2011 · letzter Beitrag vom 23. Dez 2011
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.688 Beiträge
 
Delphi 12 Athens
 
#1

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 14:49
Diese beiden Zeilen scheinen mir nicht zusammenzupassen:

Zitat:
ResStr := TResourceStream.Create(HInstance, 'Pokedex', RT_RCDATA);
und

Zitat:
Pokedex PNG "Pokedex2.png"
Sollte das nicht

Pokedex RCDATA "Pokedex2.png"

heißen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von entwickler
entwickler

Registriert seit: 16. Feb 2011
Ort: Herten
78 Beiträge
 
Delphi 5 Professional
 
#2

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 15:24
Okay, habe ich abgeändert, doch der Fehler ändert sich nicht
Vielleicht hilft ja ein Bild des Fehlers, um die Fehlerquelle herauszufinden [Die Anwendung lässt sich normal starten, aber wenn ich auf den Button vom Testprogramm klicke:]:
Angehängte Grafiken
Dateityp: jpg Anwendungsfehler.jpg (26,1 KB, 19x aufgerufen)
Traue einem PC nur soweit, wie du ihn werfen kannst.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#3

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 15:47
Moment, DLL? Was hast Du denn wo drin?
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 entwickler
entwickler

Registriert seit: 16. Feb 2011
Ort: Herten
78 Beiträge
 
Delphi 5 Professional
 
#4

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 16:07
In die DLL ist die *.res eingebunden; die DLL soll der Testanwendung das 80x80 Pixel große Bild als PNG übergeben (da muss ich noch gucken, wie ich das mache). Zwischendurch musste die PNG- Datei in einen Bitmap umgewandelt werden, damit ich aus dem Bild einen Part ausschneiden kann.
Traue einem PC nur soweit, wie du ihn werfen kannst.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#5

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 16:17
Nun mal langsam: wenn es eine reine Ressourcen-DLL ist, dann übergibt sie ja nichts. Und wenn nicht, kannst Du keine Objektinstanzen zwischen DLL und Hauptprogramm austauschen, dafür müsstest Du eine *.bpl erzeugen.
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 Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 16:32
1. Dass Du die Resource so nicht laden kannst liegt daran dass das Bild nicht unter RC DATA sondern unter PNG liegt.
2. Du erzeugst weiterhin diese Formular, diesmal greifst Du sogar auf PNGButton1 bevor es erzeugt ist
3. Wen Du das Bild irgendwann geladen hast wirst Du es nicht schaffen ein transparentest Bild mit den bisherigen Mitteln zurückzugeben.


Mit ist nicht ganz klar was das mit der DLL soll, wenn Du den Ansatz weiterverfolgen willst würde ich Dir GDI+ ans Herz legen, ist frei herunterladbar.
Hier könntest Du in ein dynamische erzeugtes GPIMage direkt PNG's laden, der DLL würdest das Handle des ZielCanvas übergeben, die Zielkoordinaten, den Quellauschnitt und die DLL könnte direkt transparent in eine beliebiges Zielcanvas malen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#7

AW: PNGs oder Dateien allgemein in EXE einbinden und auslesen

  Alt 13. Nov 2011, 17:18
So, ich habe das jetzt mal mit einer Ressourcen-DLL gemacht.
DLL:
Delphi-Quellcode:
library imagedll;

{$R pokedex.res}

begin
end.
Anwendung mit einem TImage drauf:
Delphi-Quellcode:
uses pngimage;

procedure TForm1.ButtonClick(Sender: TObject);
var
  DLLHandle: THandle;
  ResStream: TResourceStream;
  bmp: TBitmap;
  png: TPngImage;
begin
  DLLHandle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'imagedll.dll'));
  if DLLHandle <> 0 then
    try
      ResStream := TResourceStream.Create(DLLHandle, 'POKEDEX', RT_RCDATA);
      try
        ResStream.Position := 0;
        png := TPngImage.Create;
        try
          png.LoadFromStream(ResStream);
          bmp := TBitmap.Create;
          try
            bmp.Width := 80;
            bmp.Height := 80;
            bmp.PixelFormat := pf32Bit;
            BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, png.Canvas.Handle, 0, 0, SRCCOPY);
            Image1.Picture.Assign(bmp);
          finally
            bmp.Free;
          end;
        finally
          png.Free;
        end;
      finally
        ResStream.Free;
      end;
    finally
      FreeLibrary(DLLHandle);
    end;
end;
Wobei man sich natürlich fragen kann, ob man wirklich die Gesamtgrafik lädt und daraus dann den entsprechenden Ausschnitt herauskopiert oder das nicht vorher macht und die enthaltenen 493 Bildchen einzeln in die Ressource packt (siehe Anhang).
Angehängte Dateien
Dateityp: zip Pokemons.zip (2,29 MB, 8x aufgerufen)
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
Antwort Antwort

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 13:40 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