Hab ich mit dem RessourceHacker aus ner Maker-exe kopiert. Das scheint mir ein Bild direkt codiert zu sein und ich frage mich nun, wie konvertiere ich das am besten in was anzeigbares, bzw. wie konvertiere ich ein anderes Bild in genau dieses Format?
mfg Corti
15.10.2009, 14:31
Ineluki
Eigentlich sollte der Resourcehacker iirc sowas anzeigen koennen.
Ansonsten gibt es iirc bei Delphi einen Image-Editor unter den Tools.
Ist allerdings schon Jahre her und ich hab gerade kein Delphi (da kein Windows) da.
15.10.2009, 14:34
Owly
Ich hab' nie mit Delphi gearbeitet, aber dieser Link sieht so aus, als würde er genau das beschreiben, was du suchst: http://www.daniweb.com/forums/thread204064.html#
Wenn ich's auf die Schnelle richtig verstanden hab', musst du also nur eine neue Applikation starten, eine TImage Komponente im form designer benutzen und über Doppelklick auf die Picture- Eigenschaft im Object Inspector, lässt sich dann ein neues Bild laden, dass dementsprechend kodiert wird :).
15.10.2009, 14:44
Corti
Hm~ okey. Frage ist jetzt wie soll ich das machen ohne Delphi zu besitzen?
*grübel*
15.10.2009, 14:53
Whiz-zarD
ich glaube kaum, dass du so ein Bild gesucht hast.
Habs mal unter Delphi eingefügt. Resultat findest du in diesem Link
15.10.2009, 15:39
Drakes
Man könnte ja einen Konverter schreiben, hab dank dem Resultat von Whizard mal die Hex-Zahlen umgepflückt.
Vielleicht erkennt ja jemand das Format.
Ich denke es würde sich ändern, wenn mehr Farben vorhanden wären (BMP/ICO?)
Code:
07544269
746D6170
E6000000
424DE600
00000000
00007600
000028
0000000E // = 14, Breite oder Höhe
0000000E // = 14, Breite oder Höhe
0000000100040000
00000070
00000000
00000000
00000010
00000010
000000
000000 // Schwarz (0)
00
000080
00
008000
00
008080
00
800000 // Dunkelblau (4)
00
800080
00
808000
00
C0C0C0 // Hellgrau (7)
00
808080 // Dunkelgrau (8)
00
2850FF // Rot (9)
00
00D700 // Grün (A)
00
00D7FF // Gelb (B)
00
FF5000 // Hellblau (C)
00
FF00FF
00
FFFF00
00
FFFFFF // Weiss (F)
00
//Bilddaten:
// 0 ist schwarz daher wohl auf dem Kopf (erkennt man an der Form, dass es das schwarze sein muss)
// 4 ist Dunkelblau
// 7 ist hellgrau
// 8 ist dunkelgrau
// A ist grün
// B ist gelb
// F ist weiss
44444444444444 00
40000000000004 00
48777777777704 00
48FFFFFFFFF704 00
48FCCCFBBBF704 00
48FCCCFBBBF704 00
48FCCCFBBBF704 00
48FFFFFFFFF704 00
48FAAAF999F704 00
48FAAAF999F704 00
48FAAAF999F704 00
48FFFFFFFFF704 00
48888888888804 00
44444444444444 00
Erkenntnis, Farben sind in der Form BGR also wie im Bitmap Format angegeben.
15.10.2009, 15:57
Jesus_666
Das wird ein Delphi-spezifisches Format sein. Ich habe einfach mal den ganzen Kram in einen Hexeditor kopiert und siehe da, der die ersten acht Bytes erweisen sich als \7TBitmap. Da außer Delphi-Programmierern niemand den Zwang hat, alles mit T zu präfixen und kein geistig gesundes Bildformat acht Bytes auf den Header verschwenden würde, dürfte das sehr deutlich was internes sein.
Dafür spricht auch, daß file keine Ahnung hat, was das ist: $ file ~/temp/delphibild
/Users/jesus_666/temp/delphibild: data
Ich liebe es, wie die Entwickler dieser Sprache permanent das Rad neu erfinden...
15.10.2009, 16:55
Kyuu
@Corti:
Das Format ist wie folgt aufgebaut und gilt nur für Bilddaten abgelegt im BMP-Format:
Offset 0 [1 Byte]: Länge des folgenden Strings: 7
Offset 1 [7 Bytes]: String, der das Bildformat beschreibt: "TBitmap"
Offset 8 [4 Bytes]: Länge der Bilddaten im Little Endian-Format: 230
Ab Offset 12: Bilddaten im BGR-Format.
Wenn man also die ersten 12 Bytes entfernt, hat man die Daten einer validen BMP-Datei.
Anhang 5142 - Damit kannst du zwischen hexadezimalem Text und Binärformat umherkonvertieren.
Ziehe eine BMP-Datei auf bin2hex.exe und du erhältst den hexadezimalen Text, den du in Picture.Data verwenden kannst.
Kopiere den gesamten hexadezimalen Text aus Picture.Data in eine Textdatei und ziehe diese auf hex2bin.exe und du erhältst eine BMP-Datei.
Edit: Danke, Drakes. ^^
15.10.2009, 18:20
Drakes
Ich hab das mal per Hex-Editor getestet und man musste 12 Bytes wegschneiden. ;)
15.10.2009, 21:30
Desmulator
Zitat:
Das wird ein Delphi-spezifisches Format sein. Ich habe einfach mal den ganzen Kram in einen Hexeditor kopiert und siehe da, der die ersten acht Bytes erweisen sich als \7TBitmap.
Nun vielleicht kennt ja einer die TImage-Komponente? Nun vielleicht weiß auch einer, dass sie eine Picture-Instanz enthält die die Bilddaten bereitstellt. Die von Delphi waren so schlau, das Ganze so zu basteln, das ein TImage nicht nur eine Bitmap sondern auch JPEGs, PNGs und in der neueren Version afaik sogar GIF und MNG darstellen kann. Oh wunder, alles sind extra Objekte abgeleitet von TPicture. Da man nun irgendwie ermitteln muss, ob es sich um ein TBitmap oder TJpeg handelt, oder vielleicht sogar, oh wie ich diese Freiheit liebe um ein eigenes Bildformat, bzw. eigenes Resourceformat, speichert man dessen Instanznamen und seine Daten einfach ab. Dann erzeugt man einfach die Instanz schiebt die Daten an entsprechnder Stelle im RAM und ehe man sich versieht kann TImage wunderbar zu greifen :)
Zitat:
Da außer Delphi-Programmierern niemand den Zwang hat, alles mit T zu präfixen und kein geistig [...]
:rolleyes:
Zitat:
Ich liebe es, wie die Entwickler dieser Sprache permanent das Rad neu erfinden...
You made my day!
19.10.2009, 12:25
Corti
Erstmal danke an alle für die Hilfe =)
Ich hab jetzt ein Tool gefunden, dass mir hilft diese Bilder direkt auszutauschen (Ressource Tuner), aber trotzdem wieder wass gelernt, fein.