2D アフィン変換の効果

2D アフィン変換の効果は、Direct2D 行列変換と 6 つの補間モードのいずれかを使用して、3X2 行列に基づいて空間変換を画像に適用します。 この効果を使用して、画像を回転、スケーリング、傾斜、または翻訳することができます。 または、これらの操作を組み合わせることができます。 アフィン転送では、平行線と、画像内の任意の 3 つのポイント間の距離の比率が保持されます。

この効果の CLSID は CLSID_D2D12DAffineTransform です。 

画像の例

以前
効果の前の画像。
クリック後
変換後のイメージ。
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInput(0, bitmap);

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f,   0.1f, 0.9f,   8.0f, 45.0f);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();

この効果は、次の行列演算を実行します。

アフィン行列演算

入力行列は 3x2 行列として定義されていますが、最後の列には 0、0、1 が埋め込まれており、正方形の行列が生成されます。 これにより、行列乗算が可能になり、変換を 1 つの行列に連結できます。

効果のプロパティ

表示名とインデックス一覧 説明
InterpolationMode
D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE
画像のスケーリングに使用される補間モード。 品質と速度の範囲の 6 つのスケールモードがあります。
型は D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE です。
既定値は D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR です。
BorderMode
D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE
画像の境界線を計算するために使用されるモード(ソフトまたはハード)。 詳細については、「境界線モード」を参照してください。
型は D2D1_BORDER_MODE です。
既定値は D2D1_BORDER_MODE_SOFT です。
TransformMatrix
D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX
Direct2D 行列変換を使用して画像を変換する 3x2 行列。
型は D2D1_MATRIX_3X2_F です。
既定値は Matrix3x2F::Identity() です。
鮮明度
D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS
高品質の三次補間モードでは、スケーリング フィルターのシャープネス レベルが 0 から 1 の間の float になります。 値は単位なしです。 シャープネスを使用して、画像をスケーリングするときに画像の品質を調整できます。
シャープネス係数はカーネルの形状に影響します。 シャープネス係数が高いほど、カーネルは小さくなります。
注: このプロパティは、高品質の三次補間モードにのみ影響します。
型は FLOAT です。
既定値は 0.0f です。

境界線モード

名前 説明
D2D1_BORDER_MODE_SOFT 効果により、補間時に透明なブラック ピクセルで画像を埋め込み、ソフト エッジになります。
D2D1_BORDER_MODE_HARD 効果は、入力画像のサイズに出力をクランプします。

補間モード

列挙 説明
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR 最も近い単一ポイントをサンプリングし、それを使用します。 このモードでは処理時間は短くなりますが、最も低品質の画像が出力されます。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR 4 ポイント サンプルと線形補間を使用します。 このモードでは、ニアレストネイバー モードよりも処理時間が長くなりますが、より高品質の画像が出力されます。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC 補間に 16 サンプル キュービック カーネルを使用します。 このモードでは最も処理時間は長くなりますが、より高品質の画像が出力されます。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR 単一ピクセル内で 4 つの線形サンプルを使用して、優れたエッジ アンチエイリアシングを行います。 このモードは、少ないピクセル数の画像で少しスケールダウンする場合に適しています。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC 異方性フィルタリングを使用して、ビットマップの変換された形状に従ってパターンをサンプリングします。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC 変換マトリックスにダウンスケールが関係している場合は、可変サイズの高品質のキュービック カーネルを使用して、画像の事前ダウンスケールを実行します。 次に、最終的な出力にキュービック補間モードを使用します。

Note

モードを選択しない場合、効果は既定で D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR になります。

Note

異方性モードではスケーリング時にミップマップが生成されますが、この効果に入力される効果に対して Cached プロパティを true に設定すると、十分に小さい画像に対して毎回ミップマップが生成されるわけではありません。

出力ビットマップ

出力ビットマップのサイズは、画像に適用される変換行列によって異なります。

効果は変換演算を実行し、結果の周囲に境界ボックスを適用します。 出力ビットマップは境界ボックスのサイズです。

要件

要件
サポートされている最小のクライアント Windows 8 および Windows 7 [デスクトップ アプリ | Windows ストア アプリ] 用の プラットフォーム更新プログラム
サポートされている最小のサーバー Windows 8 および Windows 7 [デスクトップ アプリ | Windows ストア アプリ] 用の プラットフォーム更新プログラム
ヘッダー d2d1effects.h
ライブラリ d2d1.lib、dxguid.lib

ID2D1Effect