Condividi tramite


Effetto con matrice di convoluzione

Usare l'effetto matrice convolve per applicare un kernel 2D arbitrario a un'immagine. È possibile usare questo effetto per sfocatura, rilevare bordi, rilievo o affilare un'immagine.

Il CLSID per questo effetto è CLSID_D2D1ConvolveMatrix.

Immagine di esempio

L'esempio seguente mostra l'input e l'output dell'effetto matrice convolve con un kernel 3 x 3.

Prima di
l'immagine prima dell'effetto.
Dopo
immagine dopo la trasformazione.
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();

Proprietà dell'effetto

Enumerazione del nome visualizzato e dell'indice Descrizione
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
Dimensioni di un'unità nel kernel. Le unità si trovano in (unità DIP/kernel), dove un'unità kernel è la dimensione dell'elemento nel kernel di convoluzione. Il valore 1 (unità DIP/kernel) corrisponde a un pixel in un'immagine a 96 DPI.
Il tipo è FLOAT.
Il valore predefinito è 1,0f.
Scalemode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Modalità di interpolazione usata dall'effetto per ridimensionare l'immagine alla lunghezza dell'unità kernel corrispondente. Esistono sei modalità di scala che vanno in qualità e velocità.
Il tipo è D2D1_CONVOLVEMATRIX_SCALE_MODE.
Il valore predefinito è D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
Larghezza della matrice del kernel. Le unità sono specificate nelle unità kernel. Il tipo è UINT32.
Il valore predefinito è 3.
KernelSizeY
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
Altezza della matrice del kernel. Le unità sono specificate nelle unità kernel. Il tipo è UINT32.
Il valore predefinito è 3.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
Matrice del kernel da applicare all'immagine. Gli elementi del kernel non sono delimitati e vengono specificati come float.
Il primo set di numeri KernelSizeX in FLOAT[] corrisponde alla prima riga del kernel. Il secondo set di numeri KernelSizeX corrisponde alla seconda riga e così via fino alle righe KernelSizeY .
Il tipo è FLOAT[].
Il valore predefinito è {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}.
Divisore
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
La matrice del kernel viene applicata a un pixel e quindi il risultato viene diviso per questo valore.
0 si comporta come valore di float epsilon.
Il tipo è FLOAT.
Il valore predefinito è 1,0f.
Pregiudizi
D2D1_CONVOLVEMATRIX_PROP_BIAS
L'effetto applica la matrice del kernel, il divisore e quindi la distorsione viene aggiunta al risultato. Il pregiudizio non è associato e non è unitario. Il tipo è FLOAT.
Il valore predefinito è 0,0f.
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFF edizione Standard T
Sposta il kernel di convoluzione da una posizione centrata sul pixel di output a una posizione specificata da sinistra/destra e su/giù. L'offset è definito nelle unità kernel.
Con alcuni offset e dimensioni del kernel, i campioni del kernel di convoluzione non verranno spostati su un centro immagini pixel. I valori pixel per l'esempio del kernel vengono calcolati dall'interpolazione bilineare.
Il tipo è D2D1_VECTOR_2F.
Il valore predefinito è {0.0f, 0.0f}.
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRE edizione Standard RVE_ALPHA
Specifica se il kernel di convoluzione viene applicato al canale alfa o solo ai canali di colore.
Se si imposta questa opzione su TRUE , il kernel di convoluzione viene applicato solo ai canali di colore.
Se si imposta questa opzione su FAL edizione Standard il kernel di convoluzione viene applicato a tutti i canali.
Il tipo è BOOL.
Il valore predefinito è FALSE.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Modalità utilizzata per calcolare il bordo dell'immagine, morbido o rigido. Per altre informazioni, vedi Modalità bordo.
Il tipo è D2D1_BORDER_MODE.
Il valore predefinito è D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
Indica se l'effetto blocca i valori di colore su tra 0 e 1 prima che l'effetto passi i valori all'effetto successivo nel grafico. L'effetto blocca i valori prima di premoltiplicare l'alfa .
Se si imposta questa proprietà su TRUE, l'effetto bloccherà i valori. Se si imposta questa opzione su FAL edizione Standard, l'effetto non blocca i valori dei colori, ma altri effetti e la superficie di output potrebbero bloccare i valori se non sono sufficientemente precisi.
Il tipo è BOOL.
Il valore predefinito è FALSE.

Modalità di scalabilità

Enumerazione Descrizione
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Campiona il singolo punto più vicino e lo usa. Questa modalità usa meno tempo di elaborazione, ma restituisce l'immagine di qualità più bassa.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Usa un campione a quattro punti e l'interpolazione lineare. Questa modalità restituisce un'immagine di qualità superiore rispetto alla modalità vicina più vicina.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Usa un kernel cubico di esempio 16 per l'interpolazione. Questa modalità usa il tempo di elaborazione più elevato, ma restituisce un'immagine di qualità superiore.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa 4 campioni lineari all'interno di un singolo pixel per un buon anti-aliasing dei bordi. Questa modalità è utile per ridurre le dimensioni di piccole quantità nelle immagini con pochi pixel.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Usa il filtro anisotropico per campionare un modello in base alla forma trasformata della bitmap.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Usa un kernel cubico di dimensioni variabili di alta qualità per eseguire una pre-riduzione della scala dell'immagine se il ridimensionamento è coinvolto nella matrice di trasformazione. Usa quindi la modalità di interpolazione cubica per l'output finale.

Nota

Se non si seleziona una modalità, per impostazione predefinita l'effetto viene D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.

Modalità bordo

Nome Descrizione
D2D1_BORDER_MODE_SOFT L'effetto inserisce l'immagine di input con pixel neri trasparenti per campioni esterni ai limiti di input quando applica il kernel di convoluzione. In questo modo viene creato un bordo morbido per l'immagine e nel processo viene espansa la bitmap di output in base alle dimensioni del kernel.
D2D1_BORDER_MODE_HARD L'effetto estende l'immagine di input con una trasformazione del bordo di tipo mirror per campioni esterni ai limiti di input. Le dimensioni della bitmap di output sono uguali alle dimensioni della bitmap di input.

Bitmap di output

Le dimensioni dell'output dell'effetto dipendono dalle dimensioni del kernel di convoluzione, dall'offset del kernel, dalla lunghezza dell'unità kernel e dall'impostazione della modalità bordo.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Server minimo supportato Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Intestazione d2d1effects.h
Libreria d2d1.lib, dxguid.lib

ID2D1Effect