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
zlib verwenden, aber wie?
-
Marc Schubert
- Beiträge: 30
- Registriert: 18. Mai 2005 10:00
- Wohnort: Hannover
Ich hab mir mal die Dokumentation angeschaut. So wie ich das sehe, müsste Folgendes gehen (nicht getestet):
Du kannst qCompress dann noch einen zweiten Parameter, int compressionLevel, übergeben.
Code: Alles auswählen
QByteArray data("Das ist ein Test");
QByteArray compressed_data = qCompress(data);
-
Marc Schubert
- Beiträge: 30
- Registriert: 18. Mai 2005 10:00
- Wohnort: Hannover
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
oder
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
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));Code: Alles auswählen
void test_compress(compr, comprLen, uncompr, uncomprLen)
Byte *compr, *uncompr;
uLong comprLen, uncomprLen;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
Ich will ja nichts sagen, allerdings findet sich in der Dokumentation folgender Hinweis: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.
"The default value is -1, which specifies zlib's default compression."
Also wird da auch zlib verwendet und sollte das gleiche Ergebnis bringen.
Sodele, ich hab mal meinen alten Code rausgekramt!
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
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 );
}
Das hat so auf jeden Fall funktioniert und lehnt sich glaube ich an das Beispiel der zlib an.
Gruss, Dirk
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.
Zu beachten ist natürlich auch was komprimiert werden soll....
Gruss, Dirk
so wies aussieht gibt es das ganze in Qt schon! Mir ist auch schon aufgefallen, das man beim configure ne zlib angeben kann.
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.QByteArray qCompress ( const QByteArray & data )
Compresses the array data and returns the compressed byte array using zlib.
See also qUncompress().
Zu beachten ist natürlich auch was komprimiert werden soll....
Gruss, Dirk