Seite 1 von 1
Run Length für Bitmaps
Verfasst: Freitag 4. September 2009, 19:29
von cz3kit
Hallo, ich habe gerade Run Length geschrieben, jetzt stellt sich folgendes Problem dar, ich habe eine Datei die ist 723kB groß. Wenn ich diese jetzt kodiere wird sie nicht kleiner sondern größer und zwar 734 kB. Wenn ich diese dan dekodiere wird sie wieder 723kB groß und stimmt mit der Ausgangsdatei überein.
Das ist der Code -->
http://paste.pocoo.org/show/138038/
Also wenn ich andere Bitmaps kodiere wird die Datei ja kleiner aber nur bei der einen nicht. Woran könnte das liegen?
Gibt es hier vielleicht die Möglichkeit die Datei hochzuladen? Weil vieleicht könnt ihr euch das dan besser vorstellen.
Würde mich über Hilfe sehr freuen.
MfG cz3kit
Verfasst: Freitag 4. September 2009, 20:44
von BlackJack
@cz3kit: Wenn keine "runs" existieren, kann es halt auch nicht kleiner werden. Und wenn dann noch Markerbytes in den Ausgangsdaten vorkommen, dann wird es grösser.
Das man nicht jede Datei verkleinern kann, sollte ja eigentlich klar sein.
Verfasst: Samstag 5. September 2009, 09:14
von querdenker
Hier findet man eine gute Erklärung zu dem, was blackjack geschriebenen hat.
Verfasst: Samstag 5. September 2009, 10:12
von HWK
Ein paar Kleinigkeiten, die mir beim Überfliegen aufgefallen sind:
- Die Zeilen 41, 42, 67 und 68 können dann entfallen.
marker ist eine Konstante und sollte deshalb MARKER heißen und am Script-Anfang definiert werden. Das würde sich auch für die Dateinamen anbieten.
chr(0xFF) entspricht '\xFF'.
Zeile 7 und 8
entspricht
In Zeile 29 und 60 _ statt i, da i nicht benötigt wird.
In Python-Versionen < 3 lieber xrange als range.
MfG
HWK
Verfasst: Samstag 5. September 2009, 17:15
von cz3kit
Danke für die Tipps. Ich weiß jetzt woran es lag, dass die kodierete Datei größer wurde als die Ausgangsdatei. Es lang ganz einfach an dem Marker. Ich habe den MArker mal auf 0x90 gesetzt und damit habe ich wurde dann die kodierte Datei kleiner als die Ausgangsdatei.
MfG
cz3kit
Verfasst: Samstag 5. September 2009, 18:40
von BlackJack
@cz3kit: Damit hast Du das Problem aber nur auf den neuen Marker verschoben.
Verfasst: Samstag 5. September 2009, 19:48
von cz3kit
Ja schon aber das zeichen 0x90 kommt selterner vor als das Zeichen 0xFF. Man müsste dan am Ende eh überprüfen ob die kodierte dabei größer wird als die Ausgangsdatei, um den User zu sagen ob es Sinn hat die Datei zu kodieren oder net

Verfasst: Sonntag 6. September 2009, 08:18
von HWK
Die Zeilen 24 bis 36 lassen sich noch zusammenfassen:
Code: Alles auswählen
else:
code = MARKER + '\x00' if last == MARKER else last
for _ in xrange(counter):
rled.write(code)
MfG
HWK