エンコード オプションの使用方法 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

このトピックでは、BitmapEncoder に対してエンコーディング オプションを設定する方法について説明します。エンコーダーの動作やパラメーターは、エンコード オプションを使って微調整できます。たとえば、画質とファイル サイズのバランスは、JPEG エンコーダーの ImageQuality オプションを設定して制御できます。通常は、適切な既定値をエンコーダーが自動的に選択するため、エンコーディング オプションを自分で設定する必要はありません。

エンコーディング オプションは、BitmapEncoderCreateAsync メソッドと GoToNextFrameAsync メソッドでしか公開されていません。エンコーディング オプションは、エンコーダーまたはフレームの初期化時に指定する必要があるためです。

理解しておく必要があること

テクノロジ

必要条件

エンコーディング オプション リファレンス

BitmapEncoder では、以下に示したエンコーディング オプションを使うことができます。エンコーディング オプションは、対応する名前の文字列と特定のデータ型 (Windows.Foundation.PropertyType) の値によって定義されます。

名前 PropertyType 使用上の注意 有効な形式
ImageQuality single 有効な値は 0 ~ 1.0 です。値が大きいほど、画質が高くなります。 JPEG、JPEG-XR
CompressionQuality single 有効な値は 0 ~ 1.0 です。値が大きいほど、効率の高い (時間のかかる) 圧縮方式であることを示します。 TIFF
Lossless boolean true に設定すると、ImageQuality オプションが無視されます。 JPEG-XR
InterlaceOption boolean 画像をインターレースするかどうかを示します。 PNG
FilterOption uint8 PngFilterMode 列挙値を使います。 PNG
TiffCompressionMethod uint8 TiffCompressionMode 列挙値を使います。 TIFF
Luminance uint32Array 輝度の量子化定数を格納する 64 要素の配列です。 JPEG
Chrominance uint32Array クロミナンスの量子化定数を格納する 64 要素の配列です。 JPEG
JpegYCrCbSubsampling uint8 JpegSubsamplingMode 列挙値を使います。 JPEG
SuppressApp0 boolean App0 メタデータ ブロックの作成を抑制するかどうかを示します。 JPEG
EnableV5Header32bppBGRA boolean アルファをサポートするバージョン 5 BMP にエンコードするかどうかを示します。 BMP

 

手順

ステップ 1: 出力ストリームの取得

エンコーディングの出力先ファイルから開いた IRandomAccessStream を受け取る関数の先頭部分を記述します。ReadWrite 特権で開いたストリームを使う必要があります。

function (stream) {

  この例では、JPEG 画像へのエンコーディングを想定しています。エンコーディング オプションは、画像形式ごとに異なります。

 

出力ストリームの取得方法については、「新しい画像をエンコードする方法」をご覧ください。

ステップ 2: エンコーディング オプションのコレクションの作成

エンコーディング オプション (複数可) は、BitmapPropertySet オブジェクトを使って格納します。各エンコーディング オプションは、キーと値のペアになっています。キーは、エンコーディング オプションの名前を表す文字列です (ImageQuality など)。値は、実際のエンコーディング オプション値を明示的なデータ型 (Windows.Foundation.PropertyType) に関連付けることのできる BitmapTypedValue オブジェクトです。

この例では、最高の画質を得るように JPEG エンコーダーを設定しています。この画質を設定するため、ImageQuality キーを使ってエンコーディング オプションを作成し、その値を単精度の数値 1.0 (有効範囲の上限値) に設定しています。

    var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet();
    var qualityValue = new Windows.Graphics.Imaging.BitmapTypedValue(
        1.0, // Maximum quality
        Windows.Foundation.PropertyType.single
        );

    propertySet.insert("ImageQuality", qualityValue);

ステップ 3: エンコーディング オプションでエンコーダーを初期化する

CreateAsync メソッドの最後のパラメーターにエンコーディング オプションを指定します。

Windows.Graphics.Imaging.BitmapEncoder.createAsync(
        Windows.Graphics.Imaging.BitmapEncoder.jpegEncoderId,
        stream,
        propertySet
    ).then(function (encoder) {
        // Encoder is initialized with encoding options.
    });

これでエンコーダーは完成です。後は普通に使うことができます。

関連トピック

新しい画像をエンコードする方法