ビットマップ ソース効果
ビットマップ ソース効果を使用して、IWICBitmapSource から ID2D1Image を生成し、効果グラフの入力として使用します。 この効果は、CPU に対してスケーリングと回転を実行します。 また、必要に応じてシステム メモリ ミップマップを生成することもできます。これは、さまざまな縮小された解像度で非常に大きなイメージをアクティブにスケーリングするためのパフォーマンス最適化になります。
Note
ビットマップ ソース効果は、イメージ入力としてではなく、その入力をプロパティとして受け取ります。 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、unitless で、正または 0 である必要があります。 型がD2D1_VECTOR_2F。 既定値は {1.0f, 1.0f} です。 |
補間モード。 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 個のサンプル立方カーネルを使用します。 ミップマップは生成されません。 |
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に変換する必要があります。 ただし、画像によって提供される余分な精度 (たとえば、JPEG-XR や TIFF が 8 bpc の精度を超えて格納されている場合) を利用する場合は、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 |