Seite 1 von 1
zlib verwenden, aber wie?
Verfasst: 22. August 2005 21:05
von Marc Schubert
Hallo,
ich möchte mittels zlib ein QBytearray komprimieren, leider komme ich mit der zlib Dokumentation nicht klar. Das Beispiel hat mir leider auch nicht wirklich weitergeholfen.
Hat jemand ein Codebeispiel für mich, wie ich ein QBytearray de-/komprimieren kann?
Mit freundlichen Grüßen
Marc Schubert
Verfasst: 24. August 2005 22:28
von stippy
Hallo Marc!
Ich habe mal mit Qt und der zlib was komprimiert! Kann jetzt aber nicht sagen, dass das so arg schwer war! Die vorhandenen Beispiele haben mir sehr gut geholfen.
Wo genau ist denn Dein (Verständnis-) Problem?
Gruss, Dirk
Verfasst: 24. August 2005 22:37
von dani
Ich hab mir mal die Dokumentation angeschaut. So wie ich das sehe, müsste Folgendes gehen (nicht getestet):
Code: Alles auswählen
QByteArray data("Das ist ein Test");
QByteArray compressed_data = qCompress(data);
Du kannst qCompress dann noch einen zweiten Parameter, int compressionLevel, übergeben.
Verfasst: 27. August 2005 15:07
von Marc Schubert
Hallo,
ersteinmal danke für die antworten.
@Dani
qCompress war mein erster weg. Es scheint auch wie von dir angegebn zu funktionieren, leider ist die Compression sehr gering, auch auf dem höchsten level. Das war auch der Grund warum ich nach einer zlib lösung suche.
@ Stippi
der grad der schwierigkeit hängt stark vom betrachtungswinkel ab. ich mache das nur als hobby und bin nicht zu 100% in der materie drin. darum suche ich mir immer ein paar source fetzen mit den ich üben/spielen kann.
zum beispiel
Code: Alles auswählen
void test_compress OF((Byte *compr, uLong comprLen,
Byte *uncompr, uLong uncomprLen));
oder
Code: Alles auswählen
void test_compress(compr, comprLen, uncompr, uncomprLen)
Byte *compr, *uncompr;
uLong comprLen, uncomprLen;
diese art der deklaration ist mir nicht geläufig und stellt mich schon vor das erste problem. das zweite wäre dann die verwendeten datentypen. ich möchte ja ein qbytearray verweden. wie würde ich das anstellen.
wenn du da einen alten codefetzen hättest den ich mir mal anschauen dürfte, wäre mir schon viel geholfen.
Vielen Dank für eure Hilfe
Marc Schubert
Verfasst: 27. August 2005 22:55
von dani
Marc Schubert hat geschrieben:
@Dani
qCompress war mein erster weg. Es scheint auch wie von dir angegebn zu funktionieren, leider ist die Compression sehr gering, auch auf dem höchsten level. Das war auch der Grund warum ich nach einer zlib lösung suche.
Ich will ja nichts sagen, allerdings findet sich in der Dokumentation folgender Hinweis:
"The default value is -1, which specifies
zlib's default compression."
Also wird da auch zlib verwendet und sollte das gleiche Ergebnis bringen.

Verfasst: 29. August 2005 12:54
von stippy
Sodele, ich hab mal meinen alten Code rausgekramt!
Code: Alles auswählen
const int BUFFER_SIZE = 1024;
Q_INT8 buffer[BUFFER_SIZE];
gzFile gzfile;
QFile sourcefile( sourcefile_abs_path );
QDataStream sourcestream( &sourcefile );
if( ( gzfile = gzopen( ( char * ) targetfile_abs_path.latin1(), "wb" ) ) == 0 )
if( !sourcefile.open( IO_ReadOnly ) )
while( !sourcestream.atEnd() )
{
int i = 0;
while( !sourcestream.atEnd() && i < BUFFER_SIZE )
{
sourcestream >> buffer[i];
i++;
}
for( int k = 0; k < i; k++ )
{
gzputc( gzfile, ( char ) buffer[k] );
}
}
sourcefile.close();
gzclose( gzfile );
}
Hab Ausgaben und Fehlermeldungen rausgekürtzt. Ich hoffe Du kannst was damit anfangen.
Das hat so auf jeden Fall funktioniert und lehnt sich glaube ich an das Beispiel der zlib an.
Gruss, Dirk
Verfasst: 29. August 2005 12:58
von stippy
Hallo nochmal,
so wies aussieht gibt es das ganze in Qt schon! Mir ist auch schon aufgefallen, das man beim configure ne zlib angeben kann.
QByteArray qCompress ( const QByteArray & data )
Compresses the array data and returns the compressed byte array using zlib.
See also qUncompress().
Da gibt es doch die Möglichkeit ne qt zlib oder ne system zlib zu verwenden (oder täusche ich mich). Evtl erklärt das unterschiedliche Komprimierungsgrade.
Zu beachten ist natürlich auch was komprimiert werden soll....
Gruss, Dirk