Condividi tramite


Effetto con trasformazione prospettica 3D

Usare l'effetto di trasformazione prospettica 3D per ruotare l'immagine in 3 dimensioni come se fossero visualizzate da una distanza.

La trasformazione prospettica 3D è più conveniente dell'effetto di trasformazione 3D, ma espone solo un subset della funzionalità. È possibile calcolare una matrice di trasformazione 3D completa e applicare una matrice di trasformazione più arbitraria a un'immagine usando l'effetto di trasformazione 3D .

Il CLSID per questo effetto è CLSID_D2D13DPerspectiveTransform.

Immagine di esempio

Prima
immagine prima dell'effetto.
After
l'immagine dopo l'effetto.
ComPtr<ID2D1Effect> perspectiveTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DPerspectiveTransform, &perspectiveTransformEffect);

perspectiveTransformEffect->SetInput(0, bitmap);

perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN, D2D1::Vector3F(0.0f, 192.0f, 0.0f));
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION, D2D1::Vector3F(0.0f, 30.0f, 0.0f));

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

Proprietà dell'effetto

Enumerazione nome visualizzato e indice Descrizione
InterpolationMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE
Modalità di interpolazione utilizzata dall'effetto sull'immagine. Esistono 5 modalità di scala che variano in termini di qualità e velocità.
Il tipo è D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE.
Il valore predefinito è D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE
Modalità utilizzata per calcolare il bordo dell'immagine, morbido o rigido. Per altre info, vedi Modalità bordo .
Il tipo è D2D1_BORDER_MODE.
Il valore predefinito è D2D1_BORDER_MODE_SOFT.
Profondità
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
Distanza tra PerspectiveOrigin e il piano di proiezione. Il valore specificato in DIP e deve essere maggiore di 0.
Il tipo è FLOAT.
Il valore predefinito è 1000,0f.
PerspectiveOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN
Posizione X e Y del visualizzatore nella scena 3D. Questa proprietà è una D2D1_VECTOR_2F definita come: (punto X, punto Y). Le unità sono in DIP.
Impostare il valore Z con la proprietà Depth .
Il tipo è D2D1_VECTOR_2F.
Il valore predefinito è {0.0f, 0.0f}.
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
Conversione eseguita dall'effetto prima di ruotare il piano di proiezione. Questa proprietà è una D2D1_VECTOR_3F definita come: (X, Y, Z). Le unità sono in DIP.
Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Conversione eseguita dopo la rotazione del piano di proiezione. Questa proprietà è una D2D1_VECTOR_3F definita come: (X, Y, Z). Le unità sono in DIP.
Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {0.0f, 0.0f, 0.0f}.
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
Punto centrale della rotazione eseguita dall'effetto. Questa proprietà è una D2D1_VECTOR_3F definita come: (X, Y, Z). Le unità sono in DIP.
Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {0.0f, 0.0f, 0.0f}.
Rotazione
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
Angoli di rotazione per ogni asse. Questa proprietà è una D2D1_VECTOR_3F definita come: (X, Y, Z). Le unità sono in gradi.
Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {0.0f, 0.0f, 0.0f}.

Modalità di interpolazione

Enumerazione Descrizione
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Campiona il punto singolo più vicino e lo usa. Questa modalità usa meno tempo di elaborazione, ma restituisce l'immagine di qualità più bassa.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR Usa un campione a quattro punti e l'interpolazione lineare. Questa modalità usa più tempo di elaborazione rispetto alla modalità adiacente più vicina, ma restituisce un'immagine di qualità superiore.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_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_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Usa 4 campioni lineari all'interno di un singolo pixel per anti-aliasing dei bordi validi. Questa modalità è valida per ridurre le dimensioni delle immagini con pochi pixel.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Usa il filtro anisotropico per campionare un modello in base alla forma trasformata della bitmap.

Nota

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

Nota

La modalità Anisotropic genera mipmap durante il ridimensionamento, tuttavia, se si imposta la proprietà Cached su true sugli effetti di input per questo effetto, le mipmap non verranno generate ogni volta per immagini sufficientemente piccole.

Modalità bordo

Nome Descrizione
D2D1_BORDER_MODE_SOFT L'effetto riquadri l'immagine con pixel neri trasparenti durante l'interpolazione, causando un bordo morbido.
D2D1_BORDER_MODE_HARD L'effetto blocca l'output alle dimensioni dell'immagine di input.

Bitmap di output

Le dimensioni della bitmap di output dipendono dalla matrice di trasformazione applicata all'immagine.

L'effetto esegue l'operazione di trasformazione e quindi applica un rettangolo di selezione intorno al risultato. La bitmap di output è la dimensione del rettangolo di selezione.

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