web-dev-qa-db-ja.com

QPixmapオブジェクトをファイルに保存する方法は?

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をファイルに読み書きできるようにする必要があります!:));

19
Alex Wood

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

執筆用:

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バージョンを明示的に設定してください。

39
Kaleb Pederson