Entwickler-Ecke

Multimedia / Grafik - Grafik unbekannten Formats


baka0815 - Fr 16.04.10 15:32
Titel: Grafik unbekannten Formats
Hallo zusammen,

ich habe eine Datei, von der ich weiß, dass es ein Bild ist. Ich habe die Datei mit GIMP als "Rohdaten" importiert, so dass ich ein paar Daten angeben konnte.

Das angehängte Bild ist in einer Auflösung von 429x480 Pixeln, scheint aber nicht richtig gelesen zu werden.

Die Originaldatei hat eine Größe von 617.760 Bytes.

Das selbe Bild (wie GIMP) bekomme ich, wenn ich die Daten nach dem Muster RGB einlese, also das erste Byte enthält die roten Farbwerte, das zweite Byte die grünen und das dritte Byte den Blauen Wert. Dann der nächste Pixel, etc.

Wie man sieht, sind die Farben jedoch komplett falsch und ein Format von 429x480 Pixeln ist mir so auch nicht bekannt (das Bild ist aus einem DOS-Vollbild).

Jemand 'ne Idee, wie ich da weiter vorgehen kann?


FinnO - Fr 16.04.10 16:17

also uch finde es ist schon ganz schön gut etwas zu erkennen. Soll wohl ein Buch sein :D Ich hätte ja sonst geraten 256 Farben o.Ä. aber das sieht doch schon gut aus. Vielleicht ist Die Datei beschädigt, oder du gehst über irgendwelche Headerbytes Stillschweigend hinweg, die dann zu einer Byteverschiebung führen?

Der Begriff Rohdaten lässt das vermuten. Ich hätte mal Interesse an der Ausgangsdatei


Tryer - Fr 16.04.10 18:20

Auffällig sind die vertikalen Streifen, gut möglich das erst alle R, dann alle G, dann alle B-Werte abgelegt sind oder eine ganz andere Kodierung (z.B. HSL) vorliegt. Also mal das Original anhängen oder selber als .raw mit z.B. Irfanview importieren, da lassen sich dann verschiedene Varianten der Kodierung auswählen.

Grüsse, Dirk


baka0815 - So 18.04.10 22:04

Die Datei scheint nicht RRGGBB-Kodiert zu sein. Das Bild hat sehr wahrscheinlich 15-Bit Farben (32.768) und nicht 32-Bit.

Wenn ich versuche die RGB-Werte aus den ersten 16-Bit zu holen, dann bekomme ich das, was ich unter "Mein aktueller Stand" hochgeladen habe. Aussehen soll's aber wie in "Das Original".


Xentar - So 18.04.10 23:37

Du hast da ein ganz normales JPG hochgeladen, dass man doch so einfach mit nem TImage anzeigen kann.
Was FinnO aber wollte, ist die ORIGINAL Datei, also in dem Format, wie sie von dem Spiel wirklich vorliegt.
An dem JPG können wir auch nicht viel machen - da ist nichts mehr RRGGBB kodiert.


baka0815 - Mo 19.04.10 11:01

Ich vermute, dass ich die Original-Datei nicht hochladen darf, da ich damit Rechte Dritter verletzen würde.

Bin aber noch einen Schritt weiter gekommen - aktueller Stand im Anhang.

Nachtrag:
Vielen Dank für die Hilfe!

Also, die Informationen über die Farbe sind Pixelweise gespeichert, allerdings nicht 1 Byte pro Pixel, sondern insgesamt 2 Byte für die Farbe (keine 32-Bit, sondern 16-Bit Farbtiefe). Das zweite Byte ist dabei das höhere Byte.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
  // Zwei Byte Daten lesen
  Read(Datei, B1);
  Read(Datei, B2);

  // 16-Bit Farbe erstellen
  Col := B2 shl 8;
  Col := Col + B1;

  // Rot-Anteil holen
  R := (Col and $7C00);
  R := R shr 10;

  // Grün-Anteil holen
  G := (Col and $03E0);
  G := G shr 5;

  // Blau-Anteil holen
  B := (Col and $1F);

  // Sicherstellen, dass keine Farbe über den Byte-Raum hinaus geht
  R := R and $FF;
  G := G and $FF;
  B := B and $FF;

  // Auf 32-Bit Farbraum umrechnen (Jede Farbe hat max. 32 Werte (0-31), 32 * 8 = 256)
  R := R * 8;
  G := G * 8;
  B := B * 8;


Das 256te und 512te Pixel waren in meinem ursprünglichen Versuch immer mit der selben Farbe versehen. Hier scheint es einen Ende-Kenner zu geben (256-Byte Chunks?), diesen ignoriere ich im Moment einfach ($00FF & $0082).