Hi!
hab' noch angefangen eine Gegenprobe zu machen.
Ist meist auch besser so. Ich hatte z.B. die erste Zeile hinbekommen, und mußte dann meine Erkenntnisse ein wenig revidieren, als ich mich an die zweite machte ...
Unencoded Raster Data
0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
Hier hast Du einen Fehler gemacht! Da Du nur 16 Farben verwendest, wird der Farbwert in 4 und nicht in 8 Bit angegeben:
Unencoded Raster Data
FE DC BA 98 76 54 32 10
FE DC BA 98 76 54 32 10
Die Starttabelle bleibt wie von Jörk aufgestellt.
Den praktischen Nährwert der Spiegelung hab'
ich jedoch noch nicht recht erfasst. :-(
Das Problem liegt hier in der Art, wie die Code-Fragmente wieder zusammen gesetzt werden sollen. Gehen wir mal von 4 anstelle von 5-stelligen Codes aus:
Und die Kodierung würde die Code-Folge 1 2 3 4 5 6 ausgeben. Wenn man jetzt mit der typischen recht-nach-links schreibweise rangeht, aber die einzelnen Codes ja von Links nach rechts aneinanderhängt, kommt ungefähr sowas bei raus:
0001 0010 0011 ...
12 34 56
Das entspricht aber (leider) nicht dem was z.B. PSP ausgeben würde:
21 43 65
0010 0001 0100 0011 ???
Sinn kann man dem ganzen halt erst geben, wenn man die Umwandlung von und nach binär so gestaltet, daß das Bit mit der kleinsten Wertigkeit links steht (unpack "b4", $code):
1 2 3 4 5 6
1000 0100 1100 0010 1010 0110
Für die Umwandlung in ein Byte sollte man jetzt aber 8 Bits auf einmal nutzen, da ja das erste Bit in dieser Reihe das kleinste Bit im Byte sein soll:
10000100 11000010 10100110
21 43 65 (hier auch wieder das kleinste Bit von links)
Erstmal die erste Hälfte:
<CC> 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
siehe oben: <CC> F E D ...
Yeah Jörk es klappt!!!
Der Rest wird es ja wohl auch noch tun.
Aber, es geht ja zu wie beim Krabbenpulen,
drücken, drehen und abziehen, und dann nochmal...
Wohler wäre mir schon wenn ich das kapieren könnte.
Ich hoffe ich konnte noch ein wenig dazu beitragen ...
Das Handling gestaltet sich unter Perl gar nicht so kompliziert:
$bits = join('', map {unpack 'b8', $_} split('',$uncodiert));
... dann die codierung ;-) ...
@bytes = $codierteBits in achterGruppen;
$codiert = join('', map {pack 'b8', $_} @bytes);
Eigentlich sollte es ja auch funktionieren wenn die
Starttabelle bzw. String Table richtigrum angelegt
wird und dann, wenn es ans Ausgeben des Musters geht,
die Bits vom Niederwertigsten an achterweise abgezählt
und rausgeschoben werden. Der Rest muß dann aufgehoben
werden und ... 2 + 5 = 7 + 1 = 8 ... elende Packerei.
Ich denke, daß man um das andersrum denken nicht herumkommen wird. Zumal die Code-Längen von 2 bis 12 Bit das ganze noch mehr durch den Kakao ziehen würden ...
Da wird also auch noch Knobelei nötig werden um diese
Bitakrobatik einigermaßen sauber hinzukriegen.
s.o.
Außerdem wird es noch eine Rolle spielen wie das ganze
dann in die Blöcke gepackt wird.
Da sehe ich kein Problem:
Einfach das kodierte in Blöcke zu 255 trennen, der letzte halt dann wohl meist nicht ganz so viel (z.b. 42). Und dann die Rasterblöcke runterrattern:
-------- Raster Data Block
04 Code Size
FF Block Byte Count
[erster Block]
FF Block Byte Count (neuer Subblock)
[zweiter Block]
...
2A Block Byte Count (42)
[letzter Block]
00 Block Terminator (für den gesamten Raster Data Block)
--------
Jörk