2018年7月13日金曜日

Qt で扱える画像フォーマット

QImage と QPixmap で扱える画像フォーマットはQt Image Formats で説明されています。しかし、内容が現状と合わなくなっています。

Qt 5.6 以降で QImage と QPixmap が扱える画像フォーマットは以降のようになっています。

標準のロードフォーマット

BMP CUR DDS*4 GIF HEIC*2 HEIF*2 ICNS ICO JP2*1 JPEG JPG MNG*5 PBM PGM PNG PPM SVG*3 SVGZ*3 TGA TIF TIFF WBMP WEBP XBM XPM

標準のセーブフォーマット

BMP CUR DDS*4 HEIC*2 HEIF*2 ICNS ICO JP2*1 JPEG JPG MNG*5 PBM PGM PNG PPM TIF TIFF WBMP WEBP XBM XPM
*1 Qt 5.7 以上、Windows と Linux はバイナリープラグインなし
*2 Qt 5.11 以上、macOS と iOS のみ。ただし Qt 5.7〜5.10 では libqmacjp2 プラグイン経由で読めてしまうが書き込みはできない。Android と Windows 10 も サポートしているが Qt は未対応。
*3 iOS と Android はなし。
*4 DDS は Qt 5.7 のみ。セキュリティー上の理由から Qt 5.8 でバイナリープラグインなし。
*5 MNG はセキュリティー上の理由から Qt 5.6 でバイナリープラグインなし。

SVG は QSvgGenerator で生成しファイルに保存できます。

JPEG と JPG、TIFF と TIF は画像ファイルサフィックスの違いです。

Qt の画像フォーマットの扱いは GUI アプリケーションとして使うには充分です。しかし、画像フォーマット変換などの画像処理には適さない場合があることに注意が必要です。例えば TIFF 16bit の精度は 8bit になり、BMP の一部の形式は扱えず、セーブ時に画像フォーマットのすべてのオプション指定はできません。

Qt 5.12 で QImage::Format_RGBA64 と QImage::Format_RGBA64_Premultiplied が追加され 16-16-16-16 で使えます。