23

QByteArray データの読み取りとファイルへの書き込みに問題があります。

私の目標は、QPixmap データを QByteArray に保存し、その QByteArray をファイルに保存することです (この QByteArray をファイルから QPixmap に読み戻すことができます)。QPixmap ドキュメントから次のコードを使用したい:

     QPixmap pixmap(<image path>);  
     QByteArray bytes;
     QBuffer buffer(&bytes);
     buffer.open(QIODevice::WriteOnly);
     pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format

バッファをファイルに書き込んだ後、QByteArray を取得し、QPixmap::loadFromData() 関数を使用して QPixmap にロードできるようにしたいと考えています。

さらに説明が必要な場合はお知らせください(私は別のアプローチも受け入れています。QPixmapをファイルに読み書きできるようにする必要があるだけです!:));

4

1 に答える 1

48

それを行うには本当に長い道のりのように思えました(しかし、あなたのコメントはよりよく説明しています):

書き込み用:

QFile file("yourFile.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");

読むために:

QPixmap pixmap;
pixmap.load("yourFile.png");

QBufferが必要で、QIODeviceそれをメモリに保持したい場合には最適ですが、実際にディスクに移動する場合は、不要な中間ステップです。

編集:

ピックスマップなどを 1 つのファイルに書き込むには、QDataStreamを使用することをお勧めします。

書き込み用:

QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << QString("almost any qt value object")
    << yourQPixMap << yourQList /* << etc. */;

次に、読み取りについても同様に行うことができます。

QFile file("infile.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */;

書き出したオブジェクトと同じオブジェクトを読み込んでいることを確認する必要があります。将来の互換性の問題を回避するために、QDataStream のバージョンを明示的に設定してください。

于 2010-03-12T06:37:03.053 に答える