PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Delphi Bild im Code



Corti
15.10.2009, 13:50
Hey Leute, vielleicht könnt ihr mir bei was helfen.

Das hier:

object Image1: TImage
Left = 8
Top = 352
Width = 14
Height = 14
AutoSize = True
Picture.Data = {
07544269746D6170E6000000424DE60000000000000076000000280000000E00
00000E0000000100040000000000700000000000000000000000100000001000
000000000000000080000080000000808000800000008000800080800000C0C0
C000808080002850FF0000D7000000D7FF00FF500000FF00FF00FFFF0000FFFF
FF0044444444444444004000000000000400487777777777040048FFFFFFFFF7
040048FCCCFBBBF7040048FCCCFBBBF7040048FCCCFBBBF7040048FFFFFFFFF7
040048FAAAF999F7040048FAAAF999F7040048FAAAF999F7040048FFFFFFFFF7
040048888888888804004444444444444400}
Transparent = True
Visible = False
end
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

Ineluki
15.10.2009, 14:31
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.

Owly
15.10.2009, 14:34
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 :).

Corti
15.10.2009, 14:44
Hm~ okey. Frage ist jetzt wie soll ich das machen ohne Delphi zu besitzen?
*grübel*

Whiz-zarD
15.10.2009, 14:53
ich glaube kaum, dass du so ein Bild gesucht hast.
Habs mal unter Delphi eingefügt. Resultat findest du in diesem Link (http://www.npshare.de/files/19d27c1a/asd.bmp)

Drakes
15.10.2009, 15:39
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?)


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.

Jesus_666
15.10.2009, 15:57
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...

Kyuu
15.10.2009, 16:55
@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.

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. ^^

Drakes
15.10.2009, 18:20
Ich hab das mal per Hex-Editor getestet und man musste 12 Bytes wegschneiden. ;)

Desmulator
15.10.2009, 21:30
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 :)



Da außer Delphi-Programmierern niemand den Zwang hat, alles mit T zu präfixen und kein geistig [...]
:rolleyes:


Ich liebe es, wie die Entwickler dieser Sprache permanent das Rad neu erfinden...
You made my day! Ich liebe es, wie Leute die total eingleisig, absolut verschlossen und nur stur an ihrer glauben fest halten, nicht einmal die Lücke für eine Argumentation lassen und direkt alles abstempeln. Du hast doch nicht ernsthaft von hier bis da überlegt und welchen Sinn es haben könnte. Sondern: T? Delphi! *stempel: Müll* Und warum an altem Müll festhalten? "Früher war alles besser!" YAY! Packt die Console aus, weg mit den GUIs! Glaubst du, wenn keiner was neu erfinden würde, wären wir so weit wie jetzt? Und ihr Leute, entschuldige wenn ich dich in den falschen Topf stecke, die C/C++ programmieren, seit doch total überzeugt von euer Sprache, fast wie Mac-User die nichtmal dran denken was anderes zu benutzen, wobei sie nichts anderes kennen! Ich könnte da so kotzen, ich kenne beides beides hat vorteil, muss man klar sagen, soll doch jeder nutzen was er will, aber das ihr einfach so auf eurem glauben rumhackt das ultimative zu sein da platz mir echt der Kragen! Und wenn ich sowas hör wie nur delphi typen t vor klasse ey habt ihr eigendlich überhaupt mal hinterfragt WARUM? Ich hör immer nur was t vor jeder klasse, die spinnen, ich habt doch euer hirn nicht mal für fünf pfenig angestrengt und überlegt warum wir es machen?

Übrigens ich bin auch kein Freund von delphi, aber von Pascal und ObjectPascal, nur so ~ der Missverständen wegen

Corti
19.10.2009, 12:25
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.