共用方式為


卷積矩陣效果

使用捲積矩陣效果,將任意 2D 核心套用至映像。 您可以使用這個效果來模糊、偵測邊緣、浮凸或銳化影像。

這個效果的 CLSID 是CLSID_D2D1ConvolveMatrix。

範例影像

以下範例顯示具有 3 x 3 核心之卷積矩陣效果的輸入和輸出。

之前
效果之前的影像。
之後
轉換之後的影像。
ComPtr<ID2D1Effect> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);

convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);

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

效果屬性

顯示名稱和索引列舉 描述
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
核心中一個單位的大小。 這些單位位於 (DIP/核心單位),其中核心單位是卷積核心中元素的大小。 值 1 (DIP/核心單位) 會對應至 96 DPI 影像中的一個圖元。
此類型為 FLOAT。
預設值為 1.0f。
ScaleMode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
效果用來將影像調整為對應核心單位長度的插補模式。 有六種縮放模式在品質和速度範圍內。
此類型為D2D1_CONVOLVEMATRIX_SCALE_MODE。
預設值為 D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR。
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
核心矩陣的寬度。 這些單位是在核心單位中指定。 此類型為UINT32。
預設值是 3。
KernelSizeY
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
核心矩陣的高度。 這些單位是在核心單位中指定。 此類型為UINT32。
預設值是 3。
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
要套用至映像的核心矩陣。 核心元素不會系結,而且會指定為 floats。
FLOAT[] 中的第一組 KernelSizeX 數位會對應至核心中的第一個數據列。 KernelSizeX 數位的第二組會對應至第二列,依序對應至 KernelSizeY 數據列。
此類型為 FLOAT[]。
默認值為 {0.0f、0.0f、0.0f、0.0f、1.0f、0.0f、0.0f、0.0f、0.0f}。
因數
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
核心矩陣會套用至像素,然後結果會除以此值。
0 的行為為 float epsilon 的值。
此類型為 FLOAT。
預設值為 1.0f。
偏見
D2D1_CONVOLVEMATRIX_PROP_BIAS
效果會套用核心矩陣、除數,然後將偏差新增至結果。 偏差是無系結和無單位的。 此類型為 FLOAT。
預設值為 0.0f。
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
將捲積核心從輸出圖元的置中位置移至您指定左/右和向上/向下的位置。 位移是以核心單位定義。
由於某些位移和核心大小,卷積核心的樣本不會落在圖元影像中心。 核心樣本的圖元值是透過雙線性插補來計算。
此類型為D2D1_VECTOR_2F。
默認值為 {0.0f,0.0f}。
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
指定卷積核心是套用至 Alpha 色板還是只套用色彩色板。
如果您將此設定為 TRUE ,則捲積核心只會套用至色彩通道。
如果您將此設定為 FALSE ,則捲積核心會套用至所有通道。
此類型為 BOOL。
預設值為 FALSE。
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
用來計算影像框線、軟式或硬式的模式。 如需詳細資訊,請參閱 框線模式
類型為 D2D1_BORDER_MODE。
預設值為 D2D1_BORDER_MODE_SOFT。
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
效果是否會將色彩值限制在 0 到 1 之間,然後效果才會將值傳遞至圖形中的下一個效果。 效果會先夾住值,再預乘 Alpha 。
如果您將此值設定為TRUE,效果將會限制值。 如果您將此值設定為 FALSE,效果將不會夾住色彩值,但如果這些值不夠精確,其他效果和輸出表面可能會夾住值。
此類型為 BOOL。
預設值為 FALSE。

調整模式

列舉型別 描述
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR 取樣最接近的單一點,並使用該點。 此模式會使用較少的處理時間,但會輸出品質最低的影像。
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR 使用四點樣本和線性插補。 此模式會輸出質量高於最接近鄰近模式的影像。
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC 使用16個樣本立方核心進行插補。 此模式會使用最多處理時間,但輸出品質較高的影像。
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR 在單一像素內使用 4 個線性樣本,以取得良好的邊緣消除鋸齒功能。 此模式適合在影像上以少量像素縮小。
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC 使用非等性篩選,根據點陣圖的轉換圖形取樣圖樣。
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC 使用可變大小的高品質立方核心,在轉換矩陣中涉及縮小比例時,執行影像的預先調整。 然後使用三次插補模式進行最終輸出。

注意

如果您未選取模式,效果預設為D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR。

框線模式

名稱 描述
D2D1_BORDER_MODE_SOFT 效果會在套用卷積核心時,以透明黑色圖元填補輸入影像,以供輸入界限外的樣本使用。 這會建立影像的軟邊緣,而進程中會依核心的大小來擴充輸出位圖。
D2D1_BORDER_MODE_HARD 效果會使用鏡像類型框線轉換來擴充輸入影像,以供輸入界限外的樣本使用。 輸出點陣圖的大小等於輸入位圖的大小。

輸出點陣圖

效果輸出的大小取決於卷積核心的大小、核心位移、核心單位長度,以及框線模式設定。

需求

需求
最低支援的用戶端 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式]
最低支援的伺服器 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式]
頁首 d2d1effects.h
程式庫 d2d1.lib、dxguid.lib

ID2D1Effect