Huffman + BWT - Datei wird größer (?!)

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

N0X

Betreff: Huffman + BWT - Datei wird größer (?!)

BeitragSo, Aug 01, 2010 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey!
Ich habe mit Hilfe von Vertex Codes versucht eine Datei erst mit Huffman und dann mit BWT zu kompressen.
Das hat auch ohne Fehler geklappt, doch leider bleibt die Datei nach Huffman gleich groß und nach BWT wird sie sogar um rund 9 KB größer! Shocked
Wieso das?

(Die hier hab ich verwendet:
Huffman -> http://blitzbasic.com/codearcs...p?code=195
BWT -> https://www.blitzforum.de/foru...php?t=8654)

Mein so entstandener Code:
http://tibario.square7.ch/Huffman-Codierung.bmx

Mfg,
N0X

P.S.: Ja, ich weiß, JPG komprimieren ist Schei**, war aber nur zum Testen, müsste ja trotzdem kleiner werden!
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

BladeRunner

Moderator

BeitragSo, Aug 01, 2010 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Ursprungsdatei schon maximal komprimiert war kann das Ergebnis nur größer werden, da fast jeder Komprimierungsalgo ja auch eine Tabelle zur Dekompression anhängt. Probier deinen Algo doch einfach mit einer nicht komprimierten Bilddatei.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

N0X

BeitragSo, Aug 01, 2010 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, achso!
Hab's mal mit nem Bitmap probiert:
Ursprungsgröße: 470 KB
Huffman: 68 KB
Huffman+BWT: 21 KB

Sehr schön! Smile
Allerdings gibt mir mein Huffman Programm nen Fehler aus:
"Illegal Bank Offset"

Vorher kommt grad noch so "Compressed Size: 67 KB"
Confused

Warum?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

BladeRunner

Moderator

BeitragSo, Aug 01, 2010 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ist dann wohl der Debugger dein bester Freund...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

N0X

BeitragSo, Aug 01, 2010 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
jop.
Hab rausgefunden das ich die in der Huffman kompresste Datei nicht wieder dekompressen kann!
Da kommt dann "Attempt to acces field or method of Null Object"!
Die Dateien existieren aber 100%ig.

Woran kann das denn liegen?

Mfg,
N0X

//EDIT:
Fehler tritt hier auf:
BlitzMax: [AUSKLAPPEN]
InBank.Resize(Size)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

BladeRunner

Moderator

BeitragSo, Aug 01, 2010 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
die bank existiert wohl nicht. wo wird sie denn initialisiert?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

N0X

BeitragSo, Aug 01, 2010 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier:
BlitzMax: [AUSKLAPPEN]
Local InBank:TBank
Local OutBank:TBank

Local InFile:TStream
Local OutFile:TStream

Local Size:Int

Size = FileSize("blub.bmp")

InFile = ReadFile("blub.bmp")
OutFile = WriteFile("blub.huf")

InBank = CreateBank(Size)
OutBank = CreateBank()
ReadBank(InBank, InFile, 0, Size)
CloseFile InFile

Print "Compressed Size: "+(HuffmanCompress(InBank, OutBank)/1024)+" KB"

WriteBank(OutBank, OutFile, 0, OutBank.Size())
CloseFile OutFile

Print "Start"
BWT_Encode("blub.huf", "test.bwt")
Print "End"
Print "Start"
BWT_Decode("test.bwt", "test2.huf")
Print "End"

Size = FileSize("test2.huf")
InFile = ReadFile("test2.huf")
OutFile = WriteFile("dest.bmp")

If Not InFile Then RuntimeError("dest.huf konnte nicht gelesen werden")
If Not OutFile Then RuntimeError("dest.bmp konnte nicht geschrieben/gelesen werden")

InBank.Resize(Size)

ReadBank(InBank, InFile, 0, Size)
CloseFile InFile

Print "Decompressed Size: "+(HuffmanDecompress(InBank, OutBank)/1024)+" KB"
WriteBank(OutBank, OutFile, 0, OutBank.Size())
CloseFile OutFile


Jetzt kommt wieder:
"Illegal Bank offset"

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

BladeRunner

Moderator

BeitragSo, Aug 01, 2010 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Outbank wird nie auf die passenden Zieldaten vorbereitet, so wie ich das sehe.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

N0X

BeitragSo, Aug 01, 2010 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab ja schon bis BWT kompressed und dann auch von der BWT in .huf dekompressed.
Aber von da wieder in die Ursprungsdatei zu decompressen, da hackts.

Habe ja einfach diesen Beispielcode benutzt:
https://www.blitzforum.de/foru...ht=huffman

Und eben zwischen Zeile 21 und 23 die BWT-Kompression und danach Dekompression gequetscht.
Müsste dann doch eig. alles klappen...

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%
 

BBPro2

BeitragSo, Aug 01, 2010 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
bin mir ehrlich gesagt nich sicher ob du die huffmancodierung korrekt implementiert hast, da mir eine derartige kompression etwas zu stark vorkommt.
ich hatte das ganze vor ein paar wochen mal implementiert und hatte eine kompressionsrate von 40-60%

natürlich kommt es stark auf die datei an und wenn die bilddatei nur eine weiße fläche ist kommt die kompression vermutlich doch hin, aber 90% kommt mir per se erstmal deutlich zu viel vor.

überprüfe mal ob du überhaupt korrekt codierst bevor du den decoder unter die lupe nimmst Smile

N0X

BeitragSo, Aug 01, 2010 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, doch, das ist denke ich richtig, da das Bild tatsächlich fast nur weiß war! ;D
Mit ner Exe von 1317 KB kommt er nach der Huffman-Kompression auf 1116 KB.

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Holzchopf

Meisterpacker

BeitragSo, Aug 01, 2010 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil's hier ja offenbar um BlitzMax geht:

~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group