QImageWriter Class

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

Header: #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 は要求された画像フォーマットをサポートしていません。
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

QImageWriter が画像を書き込める場合はtrue を返します。つまり、画像フォーマットがサポートされており、割り当てられたデバイスが読み込み可能な状態です。

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()を呼び出して、QIODevice::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");

supportedImageFormats() をコールすると、QImageWriter がサポートする書式の全リストを見ることができます。

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()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。