ビットマップ ソース効果
ビットマップ ソース効果を使用して、IWICBitmapSource から ID2D1Image を生成し、エフェクト グラフの入力として使用します。 この効果は、CPU でスケーリングと回転を実行します。 また、必要に応じてシステム メモリミップマップを生成することもできます。これは、さまざまな解像度の縮小で非常に大きなイメージをアクティブにスケーリングするためのパフォーマンス最適化になる可能性があります。
手記
ビットマップ ソース効果は、イメージ入力としてではなく、その入力をプロパティとして受け取ります。 SetInput メソッドではなく、SetValue メソッドを使用する必要があります。 WicBitmapSource プロパティは、画像入力データを指定する場所です。
この効果の CLSID はCLSID_D2D1BitmapSource。
Effect プロパティ
表示名とインデックス列挙 | 形容 |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
IWICBitmapSource 読み込まれるイメージ データが含まれています。 この型は IWICBitmapSource です。 既定値は NULL です。 |
規模 D2D1_BITMAPSOURCE_PROP_SCALE |
X 方向と Y 方向のスケール量。 効果は、幅に X 値を乗算し、高さを Y 値で乗算します。 このプロパティは、次のように定義されたD2D1_VECTOR_2Fです (X スケール、Y スケール)。 スケールの量は FLOAT で、単位なしであり、正または 0 である必要があります。 型はD2D1_VECTOR_2F。 既定値は {1.0f、1.0f} です。 |
InterpolationMode。 D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE |
イメージのスケーリングに使用される補間モード。 詳細については、「補間モードの」を参照してください。 モードでミップマップが無効にされた場合、BitmapSouce は Scale プロパティと EnableDPICorrection プロパティによって決定された解像度でイメージをキャッシュします。 型はD2D1_BITMAPSOURCE_INTERPOLATION_MODE。 既定値は D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR です。 |
EnableDPICorrection D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION |
これを TRUE に設定すると、IWICBitmapSourceによって報告された DPIデバイス コンテキストの DPI に変換するように入力イメージがスケーリングされます。 効果は、InterpolationMode プロパティで設定した補間モードを使用します。 これを FALSE に設定すると、出力イメージに DPI 96.0 が使用されます。 型は BOOL です。 既定値は FALSE です。 |
AlphaMode D2D1_BITMAPSOURCE_PROP_ALPHA_MODE |
出力のアルファ モード。 これは、事前乗算でもストレートでもかまいません。 詳細については、「アルファ モードの」を参照してください。 型はD2D1_BITMAPSOURCE_ALPHA_MODE。 既定値は D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED です。 |
オリエンテーション D2D1_BITMAPSOURCE_PROP_ORIENTATION |
イメージに対して実行する反転操作または回転操作。 詳細については、「向きの」を参照してください。 型はD2D1_BITMAPSOURCE_ORIENTATION。 既定値は D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT です。 |
補間モード
効果は、イメージを拡大縮小するとき、または DPI を修正するときに、このモードを使用して補間されます。 この効果で使用される補間モードは、GPU ではなく CPU によって計算されます。
名前 | 形容 |
---|---|
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | 最も近い単一点をサンプリングし、その点を使用します。 ミップマップは生成されません。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR | 4 点サンプルと線形補間を使用します。 ミップマップは生成されません。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC | 補間に 16 個のサンプル 3 次カーネルを使用します。 ミップマップは生成されません。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT | IWICBitmapScaler インターフェイスと同じ WIC ファント補間を使用します。 ミップマップは生成されません。 |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR | バイリニア補間を使用して、システム メモリにミップマップ チェーンを生成します。 ミップマップごとに、効果はバイリニア補間を使用して 0.5 の最も近い倍数にスケーリングされ、線形補間を使用して残りの量がスケーリングされます。 |
オリエンテーション
Orientation プロパティを使用すると、画像内に埋め込まれた EXIF 方向フラグを適用できます。
名前 | 形容 |
---|---|
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT | デフォルト。 この効果では、入力の向きは変わりません。 |
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL | イメージを水平方向に反転します。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 | 画像を時計回りに 180 度回転します。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL | 画像を時計回りに 180 度回転し、水平方向に反転します。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL | 画像を時計回りに 270 度回転し、水平方向に反転します。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 | 画像を時計回りに 90 度回転します。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL | 画像を時計回りに 90 度回転し、水平方向に反転します。 |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 | 画像を時計回りに 270 度回転します。 |
このコード スニペットは、EXIF 方向の値 (propkey.h で定義) からD2D1_BITMAPSOURCE_ORIENTATION値に変換する方法を示しています。
#include <propkey.h>
#include <d2d1effects.h>
D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
switch (PhotoOrientation)
{
case PHOTO_ORIENTATION_NORMAL:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
case PHOTO_ORIENTATION_FLIPHORIZONTAL:
return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE180:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
case PHOTO_ORIENTATION_FLIPVERTICAL:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_TRANSPOSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE270:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
case PHOTO_ORIENTATION_TRANSVERSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE90:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
default:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
}
}
アルファ モード
名前 | 形容 |
---|---|
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED | 効果の出力では、事前乗算されたアルファが使用されます。 |
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT | 効果の出力には、直線アルファが使用されます。 |
備考
WIC と Direct2D を併用する場合のパフォーマンスを最適化するには、IWICFormatConverterを使用して、アプリのシナリオとイメージのネイティブ精度に基づいて適切なピクセル形式に変換する必要があります。
ほとんどの場合、アプリ Direct2D パイプラインでは、チャネルあたり 8 ビット (bpc) の精度のみが必要です。または、イメージは 8 bpc の精度しか提供しないため、GUID_WICPixelFormat32bppPBGRAに変換する必要があります。 ただし、画像によって提供される追加の精度 (たとえば、8 bpc 精度を超える JPEG-XR や TIFF) を利用する場合は、RGBA ベースのピクセル形式を使用する必要があります。 次の表に、詳細を示します。
必要な精度 | イメージのネイティブ精度 | 推奨されるピクセル形式 |
---|---|---|
チャネルあたり 8 ビット | <= チャネルあたり 8 ビット | GUID_WICPixelFormat32bppPBGRA |
可能な限り高い | <= チャネルあたり 8 ビット | GUID_WICPixelFormat32bppPBGRA |
可能な限り高い | チャンネルあたり 8 ビット > | RGBA チャネルの順序、事前乗算されたアルファ |
多くのイメージ形式では複数のレベルの精度がサポートされているため、IWICBitmapSource::GetPixelFormatを使用してイメージのネイティブ ピクセル形式を取得し、IWICPixelFormatInfo を使用して、その形式で使用可能な精度のチャネルあたりのビット数を確認する必要があります。 また、すべてのハードウェアが高精度ピクセル形式をサポートしているわけではないことに注意してください。 このような場合、アプリは、高精度をサポートするために WARP デバイスにフォールバックする必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 7 用 Windows 8 およびプラットフォーム更新プログラム [デスクトップ アプリ |[Windows ストア アプリ] |
サポートされている最小サーバー | Windows 7 用 Windows 8 およびプラットフォーム更新プログラム [デスクトップ アプリ |[Windows ストア アプリ] |
ヘッダ | d2d1effects.h |
図書館 | d2d1.lib、dxguid.lib |