Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Direct2D usa il modello di colore RGB, in cui i colori vengono formati combinando valori diversi di rosso, verde e blu. Un quarto componente, alfa, misura la trasparenza di un pixel. In Direct2D ognuno di questi componenti è un valore a virgola mobile con un intervallo di [0,0 1,0]. Per i tre componenti di colore, il valore misura l'intensità del colore. Per il componente alfa, 0,0 significa completamente trasparente e 1,0 significa completamente opaco. La tabella seguente illustra i colori risultanti da varie combinazioni di 100% intensità.
| Rosso | Verde | Blu | Colore |
|---|---|---|---|
| 0 | 0 | 0 | Nero |
| 1 | 0 | 0 | Rosso |
| 0 | 1 | 0 | Verde |
| 0 | 0 | 1 | Blu |
| 0 | 1 | 1 | Ciano |
| 1 | 0 | 1 | Magenta |
| 1 | 1 | 0 | Giallo |
| 1 | 1 | 1 | Bianco |
I valori di colore compresi tra 0 e 1 comportano sfumature diverse di questi colori puri. Direct2D usa la struttura D2D1_COLOR_F per rappresentare i colori. Ad esempio, il codice seguente specifica magenta.
// Initialize a magenta color.
D2D1_COLOR_F clr;
clr.r = 1;
clr.g = 0;
clr.b = 1;
clr.a = 1; // Opaque.
È anche possibile specificare un colore usando la classeD2D1::ColorF, che deriva dalla struttura D2D1_COLOR_F.
// Equivalent to the previous example.
D2D1::ColorF clr(1, 0, 1, 1);
Fusione alfa
La fusione alfa crea aree traslucenti fondendo il colore di primo piano con il colore di sfondo, usando la formula seguente.
- color = af * Cf + (1 - af) * Cb
dove Cb è il colore di sfondo, Cf è il colore di primo piano e af è il valore alfa del colore di primo piano. Questa formula viene applicata in modo abbinato a ogni componente colore. Si supponga, ad esempio, che il colore di primo piano sia (R = 1,0, G = 0,4, B = 0,0), con alfa = 0,6e il colore di sfondo è (R = 0,0, G = 0,5, B = 1,0). Il colore alfa misto risultante è:
R = (1,0 * 0,6 + 0 * 0,4) = .6
G = (0,4 * 0,6 + 0,5 * 0,4) = .44
B = (0 * 0,6 + 1,0 * 0,4) = .40
L'immagine seguente mostra il risultato di questa operazione di fusione.
Formati pixel
La struttura D2D1_COLOR_F non descrive come un pixel viene rappresentato in memoria. Nella maggior parte dei casi, questo non importa. Direct2D gestisce tutti i dettagli interni della conversione delle informazioni sui colori in pixel. Ma potrebbe essere necessario conoscere il formato pixel se si lavora direttamente con una bitmap in memoria o se si combina Direct2D con Direct3D o GDI.
L'enumerazione DXGI_FORMAT definisce un elenco di formati pixel. L'elenco è abbastanza lungo, ma solo alcuni di essi sono rilevanti per Direct2D. Gli altri vengono usati da Direct3D.
| Formato pixel | Descrizione |
|---|---|
|
DXGI_FORMAT_B8G8R8A8_UNORM |
Questo è il formato pixel più comune. Tutti i componenti pixel (rosso, verde, blu e alfa) sono interi senza segno a 8 bit. I componenti sono disposti in ordine BGRA in memoria. Vedere la figura seguente. |
|
DXGI_FORMAT_R8G8B8A8_UNORM |
I componenti dei pixel sono interi senza segno a 8 bit, in ordine RGBA. In altre parole, i componenti rosso e blu vengono scambiati, rispetto a DXGI_FORMAT_B8G8R8A8_UNORM. Questo formato è supportato solo per i dispositivi hardware. |
|
DXGI_FORMAT_A8_UNORM |
Questo formato contiene un componente alfa a 8 bit, senza componenti RGB. È utile per creare maschere di opacità. Per altre informazioni sull'uso delle maschere di opacità in Direct2D, vedere Panoramica delle destinazioni di rendering compatibili con A8. |
La figura seguente mostra il layout dei pixel BGRA.
Per ottenere il formato pixel di una destinazione di rendering, chiamare ID2D1RenderTarget::GetPixelFormat. Il formato pixel potrebbe non corrispondere alla risoluzione dello schermo. Ad esempio, la visualizzazione potrebbe essere impostata su colore a 16 bit, anche se la destinazione di rendering usa il colore a 32 bit.
Modalità alfa
Una destinazione di rendering ha anche una modalità alfa, che definisce la modalità di trattamento dei valori alfa.
| Modalità alfa | Descrizione |
|---|---|
| D2D1_ALPHA_MODE_IGNORE | Non viene eseguita alcuna fusione alfa. I valori alfa vengono ignorati. |
| D2D1_ALPHA_MODE_STRAIGHT | Alfa semplice. I componenti di colore del pixel rappresentano l'intensità del colore prima della fusione alfa. |
| D2D1_ALPHA_MODE_PREMULTIPLIED | Alfa premoltiplicato. I componenti di colore del pixel rappresentano l'intensità del colore moltiplicata per il valore alfa. Questo formato è più efficiente da renderizzare rispetto all'alfa semplice, perché il termine (af Cf) della formula di fusione alfa viene precalcolato. Tuttavia, questo formato non è appropriato per l'archiviazione in un file di immagine. |
Di seguito è riportato un esempio della differenza tra alfa dritto e alfa premoltiplicato. Si supponga che il colore desiderato sia rosso puro (100% intensità) con 50% alfa. Come tipo Direct2D, questo colore verrebbe rappresentato come (1, 0, 0, 0,5). Usando alfa dritto e presupponendo componenti di colore a 8 bit, il componente rosso del pixel è 0xFF. Usando alfa premoltiplicato, il componente rosso viene ridimensionato di 50% per risultare in 0x80.
Il tipo di dati D2D1_COLOR_F rappresenta sempre i colori usando alfa dritto. Direct2D converte i pixel in formato alfa premoltiplicato, se necessario.
Se sai che il tuo programma non eseguirà alcuna fusione alfa, crea il target di rendering con la modalità alfa D2D1_ALPHA_MODE_IGNORE. Questa modalità può migliorare le prestazioni, perché Direct2D può ignorare i calcoli alfa. Per altre informazioni, vedere Miglioramento delle prestazioni delle applicazioni Direct2D.
Prossimo
l'applicazione di trasformazioni in Direct2D