Condividi tramite


Effetto composito aritmetico

Usare l'effetto composito aritmetico per combinare 2 immagini usando una somma ponderata di pixel dalle immagini di input.

Il CLSID per questo effetto è CLSID_D2D1ArithmeticComposite.

Formula

La formula qui viene usata per calcolare questo effetto.

Outputrgba = C1 * Sourcergba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4

Dove C1, C2, C3, C4 sono coefficienti impostati.

I coefficienti sono mappati ai valori in un D2D1_VECTOR_4F (x, y, z, w):

  • x = C1
  • y = C2
  • z = C3
  • w = C4

Immagine di esempio

Un semplice esempio consiste nell'aggiungere i pixel di origine e di destinazione. Nell'esempio, due rettangoli arrotondati vengono composti insieme. Il rettangolo di origine è blu e la destinazione è rossa.

L'immagine seguente è l'output dell'effetto composito aritmetico con i coefficienti dell'equazione impostata sui valori qui.

  • C1 = 0
  • C2 = 1
  • C3 = 1
  • C4 = 0

Immagine di esempio che mostra due rettangoli arrotondati con le stesse dimensioni che si sovrappongono usando l'effetto composito aritmetico.

Il risultato è che vengono aggiunti i valori pixel per l'origine e la destinazione. Le aree in cui i rettangoli non si sovrappongono ai valori RGBA sono tutti 0. Dove i rettangoli si sovrappongono al colore è magenta perché i valori R e B sono entrambi al massimo.

Ecco un'altra immagine di esempio con codice.

Prima dell'immagine 1
prima dell'effetto.
Prima dell'immagine 2
la seconda immagine prima dell'effetto.
After
l'immagine dopo la trasformazione.
ComPtr<ID2D1Effect> arithmeticCompositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ArithmeticComposite, &arithmeticCompositeEffect);

arithmeticCompositeEffect->SetInput(0, bitmap);
arithmeticCompositeEffect->SetInput(1, bitmapTwo);
arithmeticCompositeEffect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS, D2D1::Vector4F(0.0f, 0.5f, 0.5f, 0.0f));

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

Proprietà dell'effetto

Enumerazione nome visualizzato e indice Descrizione
Coefficienti
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Coefficienti per l'equazione usata per comporre le due immagini di input. I coefficienti sono unitless e non associati. Il tipo è D2D1_VECTOR_4F.
Il valore predefinito è {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
L'effetto blocca i valori di colore su tra 0 e 1 prima che l'effetto passi i valori all'effetto successivo nel grafico.
Se si imposta questa proprietà su TRUE, l'effetto blocca i valori. Se si imposta questa proprietà su FALSE, l'effetto non blocca i valori di colore, ma altri effetti e la superficie di output possono bloccare i valori se non sono sufficientemente precisi.
Il tipo è BOOL.
Il valore predefinito è FALSE.

Bitmap di output

La bitmap di output dipende dai valori del coefficiente. Si tratta delle possibili dimensioni delle bitmap di output.

  • Se C1 è l'unico coefficiente diverso da zero, la dimensione dell'output è l'intersezione dei rettangoli di input.
  • Se C2 è l'unico coefficiente diverso da zero, le dimensioni dell'output sono le dimensioni del rettangolo di origine.
  • Se C3 è l'unico coefficiente diverso da zero, la dimensione dell'output è la dimensione del rettangolo Destination.
  • Se tutti i coefficienti sono zero, la dimensione dell'output è un rettangolo vuoto.
  • Per tutti gli altri valori di coefficiente, la dimensione dell'output è l'unione dei rettangoli di input.

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