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
Run Length für Bitmaps
@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.
Das man nicht jede Datei verkleinern kann, sollte ja eigentlich klar sein.
-
- User
- Beiträge: 424
- Registriert: Montag 28. Juli 2003, 16:19
- Wohnort: /dev/reality
Hier findet man eine gute Erklärung zu dem, was blackjack geschriebenen hat.
Ein paar Kleinigkeiten, die mir beim Überfliegen aufgefallen sind:
HWK
- Die Zeilen 41, 42, 67 und 68 können dann entfallen.
Code: Alles auswählen
with open("kirby.bmp", "rb") as bitmap:
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 8Code: Alles auswählen
last = char = bitmap.read(1)
entsprichtCode: Alles auswählen
ord(last) == 255
In Zeile 29 und 60 _ statt i, da i nicht benötigt wird.Code: Alles auswählen
last == '\xFF'
In Python-Versionen < 3 lieber xrange als range.
HWK
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
MfG
cz3kit
Haben wir mal wieder was gelernt :P
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
Haben wir mal wieder was gelernt :P
Die Zeilen 24 bis 36 lassen sich noch zusammenfassen:MfG
HWK
Code: Alles auswählen
else:
code = MARKER + '\x00' if last == MARKER else last
for _ in xrange(counter):
rled.write(code)
HWK