1

画像をテキストとして xml ファイルに保存できるようにしたいのですが、効率的な方法を見つけることができません。

これまでのところ、私は試しました:

QByteArray ImageAsByteArray;
QBuffer ImageBuffer(&ImageAsByteArray);
ImageBuffer.open(QIODevice::WriteOnly);
rImage.save(&ImageBuffer, "PNG"); 

return QString(ImageAsByteArray.toBase64());

それが機能しているという事実にもかかわらず、結果は巨大なファイルです! そこにQCompressを追加しようとしましたが、あまり成功しませんでした...実際、QCompressは何も圧縮していないようです...

私は間違った方法でやっていると思いますが、誰かが私の道を教えてくれますか?

4

1 に答える 1

7

画像ファイルを QImage にロードしてから、その QImage からバイトを取得していますか? はいの場合は、未加工の画像を base64 でエンコードしています。その場合、元の画像ファイルがどれだけ圧縮されているかはまったく問題ではありません。

元の画像ファイル (png または jpg) をバイナリ ストリームとして読み取り、そのストリームを base64 エンコードする必要があります。例:

QFile* file = new QFile("Image001.jpg");
file->open(QIODevice::ReadOnly);
QByteArray image = file->readAll();
int originalSize = image.length();

QString encoded = QString(image.toBase64());
int encodedSize = encoded.size();

私のテスト画像originalSizeは 1028558 バイトで、encodedSize1371412 バイトで、元のサイズより 33% 大きくなっています (質問に対する Jérôme のコメントを参照してください)。

于 2010-09-14T17:37:24.213 に答える