QImageWriter Class

QImageWriter クラスは、画像をファイルや他のデバイスに書き込むための、フォーマットに依存しないインターフェイスを提供します。詳細...

ヘッダー #include <QImageWriter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

注意:このクラスの関数はすべてリエントラントです。

パブリック型

enum ImageWriterError { DeviceError, UnsupportedFormatError, InvalidImageError, UnknownError }

パブリック関数

QImageWriter()
QImageWriter(QIODevice *device, const QByteArray &format)
QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())
~QImageWriter()
bool canWrite() const
int compression() const
QIODevice *device() const
QImageWriter::ImageWriterError error() const
QString errorString() const
QString fileName() const
QByteArray format() const
bool optimizedWrite() const
bool progressiveScanWrite() const
int quality() const
void setCompression(int compression)
void setDevice(QIODevice *device)
void setFileName(const QString &fileName)
void setFormat(const QByteArray &format)
void setOptimizedWrite(bool optimize)
void setProgressiveScanWrite(bool progressive)
void setQuality(int quality)
void setSubType(const QByteArray &type)
void setText(const QString &key, const QString &text)
void setTransformation(QImageIOHandler::Transformations transform)
QByteArray subType() const
QList<QByteArray> supportedSubTypes() const
bool supportsOption(QImageIOHandler::ImageOption option) const
QImageIOHandler::Transformations transformation() const
bool write(const QImage &image)

静的パブリックメンバ

QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType)
QList<QByteArray> supportedImageFormats()
QList<QByteArray> supportedMimeTypes()

詳細説明

QImageWriter は、画像を保存する前に圧縮レベルや画質などのフォーマット固有のオプションを設定することができます。そのようなオプションが不要な場合は、代わりにQImage::save() やQPixmap::save() を使うことができます。

画像を保存するには、まず QImageWriter オブジェクトを作成します。QImageWriterのコンストラクタにファイル名かデバイスポインタ、画像フォーマットを渡します。その後、(setQuality ()を呼び出すことで)品質など、いくつかのオプションを設定することができます。canWrite(QImageWriterが画像を書き込める(つまり、画像フォーマットがサポートされており、デバイスが書き込み可能な状態である)場合、() はtrue を返します。write() を呼び出して、画像をデバイスに書き込みます。

画像の書き込み時にエラーが発生した場合、write() は false を返します。その後、error() をコールして発生したエラーの種類を調べたり、errorString() をコールして、何が問題であったかを人間が読める形で説明したりすることができる。

QImageWriter が書き込めるフォーマットの一覧は、supportedImageFormats() を呼び出します。QImageWriter は、書き込みをサポートする画像形式プラグインに加えて、すべての組み込み画像形式をサポートしています。

注意: QImageWriter は、割り当てられたファイルまたはデバイスの排他的な制御を想定しています。QImageWriter オブジェクトが生きている間に、割り当てられたファイルやデバイスを変更しようとすると、未定義の結果になります。リソースへの即時アクセスが必要な場合は、スコープの使用を推奨します。

例えば

QString imagePath(QStringLiteral("path/image.jpeg"));
QImage image(64, 64, QImage::Format_RGB32);
image.fill(Qt::red);
{
    QImageWriter writer(imagePath);
    writer.write(image);
}

QFile::rename(imagePath,
              QStringLiteral("path/other_image.jpeg"));

QImageReaderQImageIOHandlerQImageIOPluginQColorSpaceも参照して ください。

メンバ型ドキュメント

enum QImageWriter::ImageWriterError

この列挙型は、QImageWriter で画像を書き込む際に発生する可能性のあるエラーを記述します。

定数説明
QImageWriter::DeviceError1QImageWriter 画像データの書き込み時にデバイスエラーが発生しました。エラーの詳細については、お使いのデバイスを参照してください。
QImageWriter::UnsupportedFormatError2Qt は要求された Image Formats をサポートしていません。
QImageWriter::InvalidImageError3無効なQImage を書き込もうとしました。無効な画像の例としては、NULLQImage があります。
QImageWriter::UnknownError0不明なエラーが発生しました。write() を呼び出した後にこの値が表示された場合は、QImageWriter のバグが原因である可能性が高いです。

メンバ関数ドキュメント

QImageWriter::QImageWriter()

空の QImageWriter オブジェクトを構築します。書き込む前に、setFormat() をコールして画像フォーマットを設定し、setDevice() またはsetFileName() をコールする必要があります。

[explicit] QImageWriter::QImageWriter(QIODevice *device, const QByteArray &format)

デバイスdevice と画像フォーマットformat を用いて QImageWriter オブジェクトを構築する。

[explicit] QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())

画像フォーマットformat を使って、fileName という名前のファイルに書き込む QImageWriter オブジェクトを構築します。format が提供されていない場合、QImageWriter はfileName の拡張子を調べることで画像フォーマットを検出します。

[noexcept] QImageWriter::~QImageWriter()

QImageWriter オブジェクトを破棄します。

bool QImageWriter::canWrite() const

true QImageWriter すなわち、画像フォーマットがサポートされ、割り当てられたデバイスが読 み取り用にオープンされている。

write()、setDevice()、setFormat()も参照のこと

int QImageWriter::compression() const

画像の圧縮率を返します。

setCompression()も参照ください

QIODevice *QImageWriter::device() const

QImageWriter に現在割り当てられているデバイス、またはデバイスが割り当てられていない場合はnullptr を返す。

setDevice()も参照のこと

QImageWriter::ImageWriterError QImageWriter::error() const

最後に発生したエラーのタイプを返す。

ImageWriterError およびerrorString()も参照

QString QImageWriter::errorString() const

最後に発生したエラーについて、人間が読める説明を返す。

error()も参照

QString QImageWriter::fileName() const

現在割り当てられているデバイスがファイルである場合、またはsetFileName() が呼び出された場合、この関数はQImageWriter が書き込むファイル名を返す。そうでない場合(つまり、デバイスが割り当てられていないか、デバイスがファイルでない場合)、空のQString が返される。

setFileName() およびsetDevice()も参照

QByteArray QImageWriter::format() const

QImageWriter が画像の書き込みに使用するフォーマットを返す。

setFormat()も参照

[static] QList<QByteArray> QImageWriter::imageFormatsForMimeType(const QByteArray &mimeType)

mimeType に対応する画像フォーマットのリストを返す。

この関数を呼び出す前に、QGuiApplication インスタンスを作成しておく必要があることに注意。

supportedImageFormats() およびsupportedMimeTypes()も参照

bool QImageWriter::optimizedWrite() const

画像を書き込む際に最適化がオンになっているかどうかを返します。

setOptimizedWrite()も参照 ください。

bool QImageWriter::progressiveScanWrite() const

画像をプログレッシブ画像として書き出すかどうかを返します。

setProgressiveScanWrite()も参照

int QImageWriter::quality() const

画像フォーマットの画質設定を返す。

setQuality()も参照

void QImageWriter::setCompression(int compression)

画像の圧縮率を設定する画像フォーマット固有の関数です。圧縮の設定をサポートしていない画像フォーマットでは、この値は無視されます。

compression の値の範囲は画像フォーマットによって異なります。たとえば、"tiff" フォーマットは 0(圧縮なし) と 1(LZW圧縮) の2つの値をサポートしています。

compression()も参照

void QImageWriter::setDevice(QIODevice *device)

QImageWriter deviceすでにデバイスが設定されている場合、古いデバイスはQImageWriter から削除され、それ以外は変更されない。

デバイスがまだオープンされていない場合、QImageWriter は open()を呼び出して、QIODeviceBase::WriteOnly モードでデバイスをオープンしようとする。これは、QProcessQTcpSocketQUdpSocket など、デバイスをオープンするために多くのロジックが必要な特定のデバイスでは機能しないことに注意。

device() およびsetFileName()も参照のこと

void QImageWriter::setFileName(const QString &fileName)

QImageWriter のファイル名をfileName に設定します。 内部的には、QImageWriterQFile を作成し、QIODevice::WriteOnly モードで開き、画像を書き込む際にはこのファイルを使用します。

fileName() およびsetDevice()も参照

void QImageWriter::setFormat(const QByteArray &format)

画像を書き込むときにQImageWriter が使う書式をformat に設定します。format は大文字小文字を区別しないテキスト文字列です。例

QImageWriter writer;
writer.setFormat("png"); // same as writer.setFormat("PNG");

QImageWriter がサポートするフォーマットの全リストを見るには、supportedImageFormats() をコールします。

format()も参照 ください。

void QImageWriter::setOptimizedWrite(bool optimize)

これは画像フォーマット固有の関数で、画像を書き込む際にoptimize フラグを設定します。optimize フラグの設定をサポートしていない画像フォーマットでは、この値は無視されます。

デフォルトは false です。

optimizedWrite()も参照

void QImageWriter::setProgressiveScanWrite(bool progressive)

これは画像フォーマット固有の関数で、画像書き込み時にprogressive スキャンをオンにする。progressive スキャンフラグの設定をサポートしていない画像フォーマットでは、 この値は無視されます。

デフォルトは false です。

progressiveScanWrite()も参照

void QImageWriter::setQuality(int quality)

画像フォーマットの品質設定をquality に設定します。

画像フォーマットによっては、特に非可逆なものでは、 a) 結果画像の視覚的品質と、 b) エンコード実行時間と圧縮レベルとの間のトレードオフを伴います。この関数は、それをサポートする画像フォーマットに対して、そのトレードオフのレベルを設定します。その他のフォーマットでは、この値は無視されます。

quality の値域は画像フォーマットに依存する。たとえば、"jpeg" フォーマットは、0 (低画質、高圧縮) から 100 (高画質、低圧縮) までの品質範囲をサポートしています。

quality()も参照

void QImageWriter::setSubType(const QByteArray &type)

これは、画像のサブタイプをtype に設定する画像フォーマット固有の関数です。 サブタイプは、画像の保存時にどのフォーマットを使用するかを決定するハンドラで使用できます。

例えば、DDS形式の画像をA8R8G8R8サブタイプで保存する場合などです:

QImageWriter writer("some/image.dds");
if (writer.supportsOption(QImageIOHandler::SubType))
    writer.setSubType("A8R8G8B8");
writer.write(image);

subType()も参照してください

void QImageWriter::setText(const QString &key, const QString &text)

キーkey に関連付けられた画像テキストをtext に設定します。 これは、著作権情報や画像に関するその他の情報を保存するのに便利です。例

QImage image("some/image.jpeg");
QImageWriter writer("images/outimage.png", "png");
writer.setText("Author", "John Smith");
writer.write(image);

ひとつのデータ・ブロック(たとえばコメント)を格納したい場合は、 空のキーを渡すか、"Description" のような一般的なキーを使います。

このキーとテキストは、write() をコールした後に画像データに埋め込まれます。

このオプションのサポートは、QImageIOHandler::Description で実装されています。

QImage::setText() およびQImageReader::text()も参照

void QImageWriter::setTransformation(QImageIOHandler::Transformations transform)

画像の向きを含む変換メタデータをtransform に設定します。

変換メタデータが画像フォーマットでサポートされていない場合は、書き込む前に変換が適用されます。

transformation() およびwrite()も参照

QByteArray QImageWriter::subType() const

画像のサブタイプを返します。

setSubType()も参照ください

[static] QList<QByteArray> QImageWriter::supportedImageFormats()

QImageWriter がサポートしている画像フォーマットのリストを返します。

デフォルトでは、Qt は以下のフォーマットを書き込むことができます:

フォーマットMIME タイプ説明
BMPimage/bmpWindows ビットマップ
JPGイメージ/JPEGジョイント・フォトグラフィック・エキスパート・グループ
PNG画像/pngポータブルネットワークグラフィックス
PBMimage/x-portable-bitmapポータブルビットマップ
PGMポータブルグレイマップポータブルグレイマップ
PPMポータブルピクスマップポータブルピクスマップ
XBMイメージ/x-xbitmapX11ビットマップ
XPMイメージ/x-xpixmapX11 ピクスマップ

SVGファイルの読み書きは Qt SVGモジュールでサポートされています。この Qt Image Formatsモジュールは追加の画像フォーマットのサポートを提供する。

この関数が呼ばれる前にQApplication インスタンスが生成されていなければならないことに注意。

setFormat(),QImageReader::supportedImageFormats(),QImageIOPluginも参照

[static] QList<QByteArray> QImageWriter::supportedMimeTypes()

QImageWriter がサポートする MIME タイプのリストを返す。

この関数を呼び出す前にQApplication インスタンスを作成しておく必要があることに注意。

supportedImageFormats() およびQImageReader::supportedMimeTypes()も参照

QList<QByteArray> QImageWriter::supportedSubTypes() const

画像がサポートしているサブタイプのリストを返します。

bool QImageWriter::supportsOption(QImageIOHandler::ImageOption option) const

ライタがoption をサポートしていればtrue を返し、そうでなければ false を返す。

画像フォーマットが異なれば、サポートするオプションも異なります。あるオプションが現在のフォーマットでサポートされているかどうかを調べるには、この関数を呼び出します。た と えば、 PNG 形式では画像の メ タ デー タ にテ キ ス ト を埋め込む こ と がで き ます (text() 参照)。

QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
    writer.setText("Author", "John Smith");

オプションのテストは、ライタがフォーマットと関連付けられた後で行うことができます。

QImageReader::supportsOption() およびsetFormat()も参照 ください。

QImageIOHandler::Transformations QImageWriter::transformation() const

画像が書き込まれるように設定されている変換と向きを返します。

setTransformation()も参照 ください。

bool QImageWriter::write(const QImage &image)

指定されたデバイスまたはファイル名に画像image を書き込む。成功した場合はtrue を返し、失敗した場合はfalse を返す。操作に失敗した場合は、error() を呼び出して発生したエラーの種類を調べたり、errorString() を呼び出してエラーの説明を読み取ったりすることができる。

canWrite()、error()、errorString()も参照

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.