プログラマー必見! QImageWriter::supportedSubTypes() を使いこなして画像処理を極める


QImageWriter::supportedSubTypes()は、特定の画像フォーマットがサポートするサブタイプを取得するための関数です。サブタイプは、画像フォーマットの特定のバリエーションを表します。例えば、PNGフォーマットには、"PNG8"と"PNG24"というサブタイプがあります。

関数詳細

QList<QByteArray> QImageWriter::supportedSubTypes() const;

この関数は、QList<QByteArray>型のリストを返します。このリストには、サポートされているすべてのサブタイプが含まれています。

使い方

以下の例は、QImageWriter::supportedSubTypes()を使用して、PNGフォーマットがサポートするサブタイプを取得する方法を示しています。

QImageWriter writer("image.png", "PNG");

QList<QByteArray> subTypes = writer.supportedSubTypes();

for (const QByteArray& subType : subTypes) {
    qDebug() << subType;
}

このコードは、以下の出力を生成します。

PNG8
PNG24
  • サブタイプがサポートされているかどうかは、QImageWriter::supportsOption(QImageIOHandler::SubType)を使用して確認できます。
  • サブタイプは、QImageWriter::subType()を使用して設定できます。


#include <QCoreApplication>
#include <QImage>
#include <QImageWriter>

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    // 画像ファイルパス
    QString imagePath = "image.png";

    // 画像フォーマット
    QString format = "PNG";

    // QImageWriterオブジェクトを作成
    QImageWriter writer(imagePath, format);

    // サポートされているサブタイプを取得
    QList<QByteArray> subTypes = writer.supportedSubTypes();

    // サブタイプ情報をコンソールに出力
    qDebug() << "サポートされているサブタイプ:";
    for (const QByteArray& subType : subTypes) {
        qDebug() << "  " << subType;
    }

    return 0;
}

このコードを実行すると、以下の出力がコンソールに出力されます。

サポートされているサブタイプ:
  PNG8
  PNG24
  1. #include <QCoreApplication>#include <QImage>: Qt Coreライブラリのヘッダーファイルをインクルードします。
  2. int main(int argc, char *argv[]): アプリケーションのエントリポイント関数を定義します。
  3. QCoreApplication app(argc, argv);: Qtアプリケーションオブジェクトを作成します。
  4. QString imagePath = "image.png";: 画像ファイルパスをimagePath変数に格納します。
  5. QString format = "PNG";: 画像フォーマットをformat変数に格納します。
  6. QImageWriter writer(imagePath, format);: 指定された画像ファイルパスとフォーマットを使用して、QImageWriterオブジェクトを作成します。
  7. QList<QByteArray> subTypes = writer.supportedSubTypes();: QImageWriter::supportedSubTypes()を使用して、サポートされているサブタイプを取得します。
  8. qDebug() << "サポートされているサブタイプ:";: コンソールにメッセージを出力します。
  9. for (const QByteArray& subType : subTypes) { qDebug() << " " << subType; }: ループを使用して、各サブタイプ情報をコンソールに出力します。
  10. return 0;: アプリケーションを終了します。
  • コードを実行するには、PNGフォーマットをサポートする画像ファイルが必要です。
  • このコードは、Qt CreatorなどのIDEを使用してコンパイルして実行できます。


QImageIOHandler::supportedSubTypes()の使用

利点

  • より汎用性が高い

欠点

  • QImageWriterオブジェクトよりも詳細な情報が得られない場合がある


QImageIOHandler handler("PNG");

QList<QByteArray> subTypes = handler.supportedSubTypes();

for (const QByteArray& subType : subTypes) {
    qDebug() << subType;
}

QImageReader::canRead()の使用

QImageReader::canRead()は、特定のサブタイプが読み取り可能かどうかを確認するための関数です。この関数は、サブタイプ名とファイルパスを引数として受け取ります。

利点

  • 特定のサブタイプが読み取り可能かどうかを直接確認できる

欠点

  • サポートされているすべてのサブタイプを列挙するには、ループが必要


QString imagePath = "image.png";
QString subType = "PNG24";

QImageReader reader(imagePath, subType);

if (reader.canRead()) {
    qDebug() << "サブタイプ " << subType << " は読み取り可能です";
} else {
    qDebug() << "サブタイプ " << subType << " は読み取り不可能です";
}

手動でサブタイプを列挙する

一部の画像フォーマットでは、公式ドキュメントにサポートされているサブタイプが記載されています。この情報を使用して、手動でサブタイプを列挙することもできます。

利点

  • 最も詳細な情報を取得できる場合がある

欠点

  • すべての画像フォーマットに適用できるわけではない
  • 情報が古くなっている可能性がある
// PNGフォーマットのサポートされているサブタイプ
const QList<QByteArray> pngSubTypes = {"PNG8", "PNG24"};

for (const QByteArray& subType : pngSubTypes) {
    qDebug() << subType;
}