Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bilder in Dateien einpacken und zur Laufzeit listen/anzeigen (https://www.delphipraxis.net/88323-bilder-dateien-einpacken-und-zur-laufzeit-listen-anzeigen.html)

torud 13. Mär 2007 19:27


Bilder in Dateien einpacken und zur Laufzeit listen/anzeigen
 
Hallo Wissende,

ich habe folgendes vor, bzw. stehe vor folgender Problematik.

Ich habe ein Tool erstellt, mit dem diverse Pläne erstellt werden können. Nun möchte bzw. muss ich aber meine Bilder schützen und nicht einfach so wie bisher auf der Festplatte in Verzeichnissen ablegen, die ich dann einfach einlese, weil da auch Bilder von verschiedenen Sportverbänden inkludiert sind.

Ich möchte also meine Bilder in einer Datei ablegen und zur Laufzeit "auspacken", anzeigen und auf Wunsch in den Plan einbinden.

Wie folgt gehe ich bisher vor.

Ein Ordner mit diversen Logos. Es werden alle Bildnamen des Ordners eingelesen, in eine Listbox geschrieben und bei anklicken in einer TImage angezeigt.

Zum anderen habe ich Verzeichnisse in einem Verzeichnis. Zum Beispiel:

Oberordner: Sportarten
und darin dann weitere Ordner: Fussball, Handball, Basketball usw...
dann in den Ordnern die jeweiligen dazugehörenden Bilder...die wie oben dann in einer Listbox gelistet werden und bei Klick angezeigt und eingebunden werden können.

Nun frage ich mich, was am günstigsten ist und am einfachsten zu händeln diese Strukturen so aus einer oder mehreren Datei/en DYNAMISCH einzulesen, ohne zu wissen, was drin ist. Könnte ich das mit einer DLL lösen? Oder wäre eine ZipDatei besser? Jedoch könnte ja jeder die ZipDatei einfach entpacken...

Ich bitte um Tipps und Hinweise...bevorzuge eine Lösung mit DLL, wenn es sinnvoll ist...

marabu 13. Mär 2007 19:58

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Hallo Tom,

auch wenn hier im Forum immer wieder Möglichkeiten des technischen Zugriffsschutzes diskutiert werden, so ist das im professionellen Bereich wohl eher kein Thema. In deinem Fall mit den Logos würde ich diese einfach als Resourcen beipacken - DLL oder EXE, egal.

Aufgabe der Rechteinhaber ist es autorisierte Resourcen bereit zu stellen und diese gegebenenfalls intern (digital watermark) oder extern (hash) zu signieren, damit eigene Rechte später auch durchgesetzt werden können.

Für deine Verzeichnisstrukturen kannst du sicher eine Zuordnung von Strings und Images über deren ResourceID entwickeln - die Baumtiefe scheint mir begrenzt zu sein.

Freundliche Grüße

torud 13. Mär 2007 20:45

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Hallo Marabu,

vielen Dank für Deine Hinweise. DLL wollte ich lesen, denn ich will die Dateien nicht mit in die Exe packen, da ich so nur die DLL updaten muss und die Exe selbst so bleiben kann. Ich dachte mir schon, dass ich dann in die DLL eine InfoDatei mit reinpacke, wo drinsteht, wie die Struktur sein muss, was die Dynamik ermöglicht.

Darf ich noch fragen, wie ich das Erstellen einer solchen DLL realisieren kann? Ich habe noch keine DLL erstellt, und aus einer solchen gelesen...

torud 13. Mär 2007 20:59

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Ich werds mal hiermit http://www.delphipraxis.net/internal...ect.php?t=4232 versuchen

torud 14. Mär 2007 19:57

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also da das Thema und die Problematik immer noch die Gleiche ist, werde ich hier auch weiter posten. Ich habe mal versucht das kleine DLL-Tutorial durchzuarbeiten. Naja bei 3 Schritten auch kein Problem. Leider blieb der Erfolg aus. Im Anhang habe ich mal eine Zip-Datei, in der ich ein Projekt für das Erstellen der DLL habe und ein Projekt in der eigentlich das Bild laut Tutorial angezeigt werden sollten. Leider wird nichts angezeigt. Was habe ich da falsch gemacht.

Pfoto 14. Mär 2007 20:56

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo torud,

ich habe mal eine Library heruntergeladen,
mit der man Bilder zur Laufzeit aus einer Zip lesen kann,
also ohne sie entpacken zu müssen.

So kämst du im das DLL-Thema herum und kanns zudem
die Bilder extrem schnell für dein Programm vorbereiten.


Da ich nicht mehr die Original-Quelle weiß, ist im
Anhang die entsprechende Datei aus meinem Download.


Gruß
Pfoto

torud 15. Mär 2007 07:20

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Also das funktioniert schon mal sehr sehr gut! Ich muss nun nur noch eine sinnvolle Routine schaffen, in der ich zum Beispiel die Sportarten verwalte, wie Fussball, Handball, Basketball und wenn man diese anklickt, sollen dann die verschiedenen Ligen gelistet werden, wie zum Beispiel 1.Liga, 2.Liga usw. und wenn man dann in der Combobox die Liga ausgewählt hat, sollen alle Bitmaps der Liga gelistet werden, ebenso wie in Deinem Beispieltool.

Pfoto 15. Mär 2007 08:47

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Hallo nochmal!

ich weiß nicht mehr genau, ob die oben vorgestellten ZIP-Routinen auch Verzeichnisse
unterstützen. Wenn nicht könntest du auch mal unter dem Begriff "Virtuelle Verzeichnisse"
schauen (z.B. bei www.torry.net)

Auf Anhieb weiß ich, dass bei url=http://www.aidaim.com/_lang/de/products/sfs/sfs_spec.php]http://www.aidaim.com/_lang/de/products/sfs/sfs_spec.php[/url] solche virtuellen Verzeichnisse im Sortiment sind. Hat nur einen deftigen Preis :-(

Gruß
Pfoto

Mavarik 15. Mär 2007 09:11

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Zitat:

Zitat von torud
Nun möchte bzw. muss ich aber meine Bilder schützen und nicht einfach so wie bisher auf der Festplatte in Verzeichnissen ablegen, die ich dann einfach einlese, weil da auch Bilder von verschiedenen Sportverbänden inkludiert sind.

Schützen?

1. Also aus einer Resource, kann ich die Bilder auch wieder rausholen. Also wenn dann in einem eingenen Format abspeichern.

2. Du wirst Du die Bilder auf dem Monitor darstellen, oder? Da kann ich Sie mir ja dann auch so holen...

Also wofür den Aufwand?

Frank :coder:

torud 15. Mär 2007 12:28

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Hallo,

ich danke Euch für die Antworten.

@Mavarik

Natürlich hast Du Recht, wenn Du sagst, dass man die Bilder auch aus einer Ressouce rausholen kann, egal ob man es mit einer DLL oder mit einem Zip-File macht. Aber dazu gehört dann schon eine gewisse und ich hoffe ich übertreibe damit nicht, kriminelle Energie. Auch wäre es möglich die Logo per Screenshot zu erhalten und einfach auszuschneiden. Alles kein Problem. Wir wollen nicht den absoluten Schutz, aber wir haben die Logos diverser Ligen erhalten und die wollen natürlich nicht, dass diese Logos von jedem X-beliebigen einfach so weitergenutzt werden. Sie sollen eben Toolgebunden benutzt werden.

Eigenes Format? Wie meinst Du das? Alle Bilder, die ich nutze, sind png´s. Wie soll ich die in einem eigenen Format speichern???

Blackheart 15. Mär 2007 12:37

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo hab mal dein Prog kurz getestet und folgende Fehler sind Mir aufgefallen.
In der Dll befanden sich keine Bilder, arbeite mal beim erstellen vorsichtshalber mit kompletten Pfaden.
Beim aufruf der Dll hast Du Bilder.dll aufgerufen obwohl deine Dll - dll.dll hieß oder bessergesagt heißt.
Die Bilder hast Du versucht mit Ihrem Namen aufzurufen also 1.jpg usw., Du musst Sie aber mit dem Variablennamen
aufrufen die Du vergeben hast also Bild1, Bild2 usw.
Hoffe das Hilft Dir habs Im Grunde so gelassen bis auf die Zwei Sachen und den Zähler.

Delphi-Quellcode:
var
  Form1: TForm1;
  i :integer;
implementation

{$R *.dfm}

var
  Form1: TForm1;
  i:Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  h :HINST;
  r :TResourceStream;
  j :TJpegImage;
begin
try
  inc(i); //Zähler nur zur Veranschaulichung
  h := LoadLibrary('dll.dll'); // Falscher Aufruf Bilder.dll
  if h <> 0 then
  begin
    r := TResourceStream.Create(h, 'Bild'+IntTostr(i), 'Jpeg'); //Falscher Bildname '1' anstatt Bild1
    j := TJpegImage.Create;
      try
        j.LoadFromStream(r);
        Image1.Picture.Bitmap.Assign(j);
      finally
        j.Free;
        r.Free;
      end;
  end;
  FreeLibrary(h)
  except
  Showmessage('Mehr Bilder Befinden sich nicht in der Dll !');
  i:=0;
end;
end;

end.

Mavarik 15. Mär 2007 13:31

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Zitat:

Zitat von torud
Eigenes Format? Wie meinst Du das? Alle Bilder, die ich nutze, sind png´s. Wie soll ich die in einem eigenen Format speichern???

Na Zum Beispiel so...

Lade Bild in Memorystream..

Dann ein Pattern mit XOR drüberlaufen lassen... Beispiel XOR $55$AA
Und dann speichern...

Schon kann kein Programm die Bilder mehr anzeigen...

Frank :coder:

turboPASCAL 15. Mär 2007 13:38

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Blackheart, Autsch ;) ne so nicht. Ich habe es dir mal Verbessert.
Einfach schnell und simpel. -.-^

torud 15. Mär 2007 13:54

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Zitat:

Zitat von Mavarik
Lade Bild in Memorystream..
Dann ein Pattern mit XOR drüberlaufen lassen... Beispiel XOR $55$AA
Und dann speichern...

Schon kann kein Programm die Bilder mehr anzeigen...

Hört sich interessant an, aber mit XOR und Konsorten habe ich noch NIE was gemacht...Wäre es dann nicht auch so, dass ich beim Laden des Bildes wieder diese XOR-Routine in umgekehrter Reihenfolge drüberlaufen lassen müsste, um aus dem Datenkram wieder Bilddaten zu machen!?

Vielleicht finde ich ja mal was im Netz dazu. Desweiteren muss ich, so denke ich nun bald ne Entscheidung fällen, ob die Daten nun in eine DLL sollen, oder in ein Zip, oder ob das dann mit der XOR-Variante gar nicht mehr nötig ist...Das klingt nun ziemlich interessant für mich, weil ich dann die Bilder einfach alle weiter in den Verzeichnissen so lassen könnte...*grübel* !?!?

Blackheart 15. Mär 2007 14:20

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
@turboPASCAL Naja gut, aber eigentlich gings ja um torud sein Beispiel und da waren ja im Prinzip nur die zwei Fehler um es zum Laufen zu bringen.
Besser machen kann man es natürlich immer :wink: :thumb:

taktaky 9. Okt 2007 11:16

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Zitat:

Zitat von Blackheart
...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  h :HINST;
  r :TResourceStream;
  j :TJpegImage;
begin
try
  inc(i); //Zähler nur zur Veranschaulichung
  h := LoadLibrary('dll.dll'); // Falscher Aufruf Bilder.dll
  if h <> 0 then
  begin
    r := TResourceStream.Create(h, 'Bild1'+IntTostr(i), 'Jpeg');

    j := TJpegImage.Create;
      try
        j.LoadFromStream(r);
        Image1.Picture.Bitmap.Assign(j);
      finally
        j.Free;
        r.Free;
      end;
  end;
  FreeLibrary(h)
  except
  Showmessage('Mehr Bilder Befinden sich nicht in der Dll !');
  i:=0;
end;
end;

end.

Delphi-Quellcode:

    r := TResourceStream.Create(h, 'Bild1'+IntTostr(i), 'Jpeg'); // Problem mit +IntTostr(i)
// so funktioniert:
//r := TResourceStream.Create(h, 'Bild11', 'JPEG'); // aber (i) hat keine Rolle !
Das Beispiel "dll_test_neuerrer.zip" von @Turbopascal funktioniert super
Die Frage nun, kann man den Code anpassen, so man Video statt Bilder verwendet?

<>

DeddyH 9. Okt 2007 11:57

Re: Bilder in Dateien einpacken und zur Laufzeit listen/anze
 
Könntest Du endlich mal damit aufhören, das Forum mit immer derselben Frage zuzuspammen? :evil:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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 by Thomas Breitkreuz