Formati pixel e modalità alfa supportati

Questo argomento descrive i formati pixel e le modalità alfa supportate dalle varie parti di Direct2D, inclusi ogni tipo di destinazione di rendering, ID2D1Bitmap e ID2D1ImageSource. Contiene le sezioni seguenti.

Formati YUV supportati per l'origine immagine DXGI

Id2D1ImageSource è un provider astratto di pixel. Può essere creata un'istanza da WIC (CreateImageSourceFromWic o IDXGISurface (CreateImageSourceFromDxgi).

ID2D1ImageSourceFromWic supporta lo stesso set di formati pixel e le modalità alfa di ID2D1Bitmap.

Oltre a quanto sopra, un ID2D1ImageSource di cui viene creata un'istanza da IDXGISurface supporta anche alcuni formati di pixel YUV, inclusi i dati planari suddivisi in più superfici. Per altre informazioni sui requisiti per ogni formato pixel, vedere CreateImageSourceFromDxgi.

Formato
DXGI_FORMAT_AYUV
DXGI_FORMAT_NV12
DXGI_FORMAT_YUY2
DXGI_FORMAT_P208
DXGI_FORMAT_V208
DXGI_FORMAT_V408
DXGI_FORMAT_R8_UNORM
DXGI_FORMAT_R8G8_UNORM

 

Specifica di un formato pixel per una destinazione di rendering

Quando si crea una destinazione di rendering, è necessario specificarne il formato pixel. Per specificare il formato pixel, usa una struttura D2D1_PIXEL_FORMAT per impostare il membro pixelFormat di una struttura D2D1_RENDER_TARGET_PROPERTIES. Passare quindi tale struttura al metodo Create appropriato, ad esempio ID2D1Factory::CreateHwndRenderTarget.

La struttura D2D1_PIXEL_FORMAT ha due campi:

  • format, un valore DXGI_FORMAT che descrive le dimensioni e la disposizione dei canali in ogni pixel e
  • alfa, valore D2D1_ALPHA_MODE che descrive come vengono interpretate le informazioni alfa.

L'esempio seguente crea una struttura D2D1_PIXEL_FORMAT e la usa per specificare il formato pixel e la modalità alfa di un ID2D1HwndRenderTarget.

RECT rc;
GetClientRect(m_hwnd, &rc);

D2D1_SIZE_U size = D2D1::SizeU(
    rc.right - rc.left,
    rc.bottom - rc.top
    );

// Create a pixel format and initial its format
// and alphaMode fields.
D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat(
    DXGI_FORMAT_B8G8R8A8_UNORM,
    D2D1_ALPHA_MODE_IGNORE
    );

D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties();
props.pixelFormat = pixelFormat;

// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
    props,
    D2D1::HwndRenderTargetProperties(m_hwnd, size),
    &m_pRT
    );

Diverse destinazioni di rendering supportano combinazioni di formato e modalità alfa diverse. Nelle sezioni seguenti sono elencate le combinazioni di formato e alfa supportate da ogni destinazione di rendering.

Formati supportati per ID2D1HwndRenderTarget

I formati supportati per un ID2D1HwndRenderTarget dipendono dal rendering tramite hardware o software o dal fatto che Direct2D gestisca automaticamente la modalità di rendering per impostazione predefinita.

Nota

È consigliabile usare DXGI_FORMAT_B8G8R8A8_UNORM come formato pixel per ottenere prestazioni migliori. Ciò è particolarmente utile per le destinazioni di rendering software. Le destinazioni di formato BGRA offrono prestazioni migliori rispetto ai formati RGBA.

 

Quando si crea un ID2D1HwndRenderTarget, usare la struttura D2D1_RENDER_TARGET_PROPERTIES per specificare le opzioni di rendering. Le opzioni includono il formato pixel, come indicato nella sezione precedente. Il campo di tipo di questa struttura consente di specificare se la destinazione di rendering esegue il rendering su hardware o software o se Direct2D deve determinare automaticamente la modalità di rendering.

Per consentire a Direct2D di determinare se la destinazione di rendering usa il rendering hardware o software, usare l'impostazione D2D1_RENDER_TARGET_TYPE_DEFAULT .

Nella tabella seguente sono elencati i formati supportati per gli oggetti ID2D1HwndRenderTarget creati usando l'impostazione D2D1_RENDER_TARGET_TYPE_DEFAULT.

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

Per forzare una destinazione di rendering per l'uso del rendering hardware, usare l'impostazione D2D1_RENDER_TARGET_TYPE_HARDWARE . Nella tabella seguente sono elencati i formati supportati per gli oggetti ID2D1HwndRenderTarget che usano in modo esplicito il rendering hardware.

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

Per forzare una destinazione di rendering per l'uso del rendering software, usare l'impostazione D2D1_RENDER_TARGET_TYPE_SOFTWARE . Nella tabella seguente sono elencati i formati supportati per gli oggetti ID2D1HwndRenderTarget che usano in modo esplicito il rendering software.

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

Indipendentemente dal fatto che ID2D1HwndRenderTarget sia accelerato dall'hardware, il formato di DXGI_FORMAT_UNKNOWN usa DXGI_FORMAT_B8G8R8A8 per impostazione predefinita e la modalità alfa D2D1_ALPHA_MODE_UNKNOWN usa D2D1_ALPHA_MODE_IGNORE per impostazione predefinita.

Formati supportati per ID2D1DeviceContext

A partire da Windows 8, il contesto di dispositivo sfrutta più formati di colore elevato direct3D, ad esempio:

  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R32G32B32A32_FLOAT

Usare il metodo ID2D1DeviceContext::IsDxgiFormatSupported per verificare se un formato funziona in un contesto di dispositivo specifico. Questi formati possono funzionare anche in un ID2D1HwndRenderTarget.

Questi formati si aggiungono ai formati supportati dall'interfaccia ID2D1HwndRenderTarget in Windows 7. Per altre informazioni, vedere Dispositivi e contesti di dispositivo.

Formati supportati per la destinazione di rendering compatibile

Una destinazione di rendering compatibile (un ID2D1BitmapRenderTarget creato da uno dei metodi ID2D1RenderTarget::CreateCompatibleRenderTarget) eredita i formati supportati e le modalità alfa della destinazione di rendering che l'ha creata. Una destinazione di rendering compatibile supporta anche le combinazioni di formato e modalità alfa seguenti, indipendentemente dal supporto padre.

Formato Modalità alfa
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

Il formato DXGI_FORMAT_UNKNOWN usa il formato di destinazione di rendering padre per impostazione predefinita e la modalità alfa D2D1_ALPHA_MODE_UNKNOWN usa D2D1_ALPHA_MODE_PREMULTIPLIED per impostazione predefinita.

Formati supportati per la destinazione di rendering della superficie DXGI

Una destinazione di rendering DXGI è un ID2D1RenderTarget creato da uno dei metodi ID2D1Factory::CreateDxgiSurfaceRenderTarget. Supporta le combinazioni di formato e modalità alfa seguenti.

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE

 

Nota

Il formato deve corrispondere al formato della superficie DXGI a cui disegna la destinazione di rendering della superficie DXGI.

 

Il formato DXGI_FORMAT_UNKNOWN usa il formato di superficie DXGI per impostazione predefinita. Non usare la modalità alfa D2D1_ALPHA_MODE_UNKNOWN con una destinazione di rendering della superficie DXGI. Non ha alcun valore predefinito e causerà l'esito negativo della creazione della destinazione di rendering della superficie DXGI.

Formati supportati per la destinazione di rendering bitmap WIC

Una destinazione di rendering bitmap WIC è un ID2D1RenderTarget creato da uno dei metodi ID2D1Factory::CreateWicBitmapRenderTarget. Supporta le combinazioni di formato e modalità alfa seguenti.

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

Il formato pixel della destinazione bitmap WIC deve corrispondere al formato pixel della bitmap WIC.

Il formato DXGI_FORMAT_UNKNOWN usa il formato bitmap WIC per impostazione predefinita e la modalità alfa D2D1_ALPHA_MODE_UNKNOWN usa la modalità alfa bitmap WIC per impostazione predefinita.

Formati supportati per ID2D1DCRenderTarget

Id2D1DCRenderTarget supporta le combinazioni di formato e modalità alfa seguenti.

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE

 

Non usare il formato DXGI_FORMAT_UNKNOWN o la modalità alfa D2D1_ALPHA_MODE_UNKNOWN con ID2D1DCRenderTarget. Non ha un valore predefinito e causerà l'esito negativo della creazione di ID2D1DCRenderTarget .

Specifica di un formato pixel per un ID2D1Bitmap

In genere, gli oggetti ID2D1Bitmap supportano i formati e le modalità alfa seguenti (con alcune restrizioni, descritte nei paragrafi che seguono).

Formato Modalità alfa
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_B8G8R8X8_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC1_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_BC1_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC1_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_BC2_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_BC2_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC2_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_BC3_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_BC3_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC3_UNORM (solo Windows 8.1 e versioni successive) D2D1_ALPHA_MODE_UNKNOWN

 

Quando usi il metodo ID2D1RenderTarget::CreateSharedBitmap, usa il campo pixelFormat di una struttura D2D1_BITMAP_PROPERTIES per specificare il formato pixel della nuova destinazione di rendering. Deve corrispondere al formato pixel dell'origine ID2D1Bitmap .

Quando usi il metodo CreateBitmapFromWicBitmap, usa il campo pixelFormat di una struttura D2D1_BITMAP_PROPERTIES (anziché il membro pixelFormat di una struttura D2D1_RENDER_TARGET_PROPERTIES) per specificare il formato pixel della nuova destinazione di rendering. Deve corrispondere al formato pixel dell'origine bitmap WIC.

Nota

Per altre informazioni sul supporto per i formati pixel compressi (BCn), vedere Compressione a blocchi.

 

Formati WIC supportati

Quando usi il metodo CreateBitmapFromWicBitmap per creare una bitmap da una bitmap WIC o quando usi il metodo CreateSharedBitmap con un IWICBitmapLock, l'origine WIC deve essere in un formato supportato da Direct2D.

Formato WIC Formato DXGI corrispondente Modalità alfa corrispondente
GUID_WICPixelFormat8bppAlpha DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT o D2D1_ALPHA_MODE_PREMULTIPLIED
GUID_WICPixelFormat32bppPRGBA DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED o D2D1_ALPHA_MODE_IGNORE
GUID_WICPixelFormat32bppBGR DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
GUID_WICPixelFormat32bppPBGRA DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED

 

Per un esempio che illustra come convertire una bitmap WIC in un formato supportato, vedere Come caricare una bitmap da un file.

Uso di un formato non supportato

L'uso di qualsiasi combinazione diversa dai formati pixel e dalle modalità alfa elencate nelle tabelle precedenti genera un D2DERR_UNSUPPORTED_PIXEL_FORMAT o un errore di E_INVALIDARG.

Informazioni sulle modalità alfa

Informazioni sulle modalità alfa premoltiplicate e dritte

L'enumerazione D2D1_ALPHA_MODE indica se il canale alfa utilizza alfa premoltiplicato, alfa dritto o deve essere ignorato e considerato opaco. Con alfa dritto, il canale alfa indica un valore che corrisponde al modo in cui è trasparente un colore.

I colori vengono sempre trattati come alfa retta da comandi e pennelli di disegno Direct2D, indipendentemente dal formato di destinazione.

Con alfa premoltiplicato, ogni canale di colore viene ridimensionato in base al valore alfa. In genere, nessun valore del canale colore è maggiore del valore del canale alfa. Se un valore del canale colore in un formato pre-moltiplicato è maggiore del canale alfa, la matematica di fusione standard di origine over crea una miscela additivi.

Il valore del canale alfa stesso è lo stesso sia in alfa dritto che pre-moltiplicato.

Differenze tra alfa dritto e premoltiplicato

Quando si descrive un colore RGBA utilizzando alfa dritto, il valore alfa del colore viene archiviato nel canale alfa. Ad esempio, per descrivere un colore rosso opaco del 60%, usare i valori seguenti: (255, 0, 0, 255 * 0,6) = (255, 0, 0, 153). Il valore 255 indica il rosso completo e 153 (ovvero il 60% del 255) indica che il colore deve avere un'opacità del 60%.

Quando si descrive un colore RGBA utilizzando alfa premoltiplicato, ogni colore viene moltiplicato per il valore alfa: (255 * 0,6, 0 * 0,6, 0 * 0,6, 255 * 0,6) = (153, 0, 0, 153).

Indipendentemente dalla modalità alfa della destinazione di rendering, i valori D2D1_COLOR_F vengono sempre interpretati come alfa dritti. Ad esempio, quando si specifica il colore di un OGGETTO ID2D1SolidColorBrush da usare con una destinazione di rendering che usa la modalità alfa premoltiplicata, specificare il colore come si farebbe se la destinazione di rendering utilizzasse alfa dritto. Quando si disegna con il pennello, Direct2D converte il colore nel formato di destinazione.

Modalità alfa per le destinazioni di rendering

Indipendentemente dall'impostazione della modalità alfa, il contenuto di una destinazione di rendering supporta la trasparenza. Ad esempio, se si disegna un rettangolo rosso parzialmente trasparente con una destinazione di rendering con una modalità alfa di D2D1_ALPHA_MODE_IGNORE, il rettangolo apparirà rosa (se lo sfondo è bianco).

Se disegnare un rettangolo rosso parzialmente trasparente quando la modalità alfa è D2D1_ALPHA_MODE_PREMULTIPLIED, il rettangolo apparirà rosa (presupponendo che lo sfondo sia bianco) e si può vedere attraverso di esso a qualsiasi elemento dietro la destinazione di rendering. Ciò è utile quando si usa un ID2D1DCRenderTarget per eseguire il rendering in una finestra trasparente o quando si usa una destinazione di rendering compatibile (un rendering creato dal metodo CreateCompatibleRenderTarget ) per creare una bitmap che supporti la trasparenza.

Modalità ClearType e Alfa

Se si specifica una modalità alfa diversa da D2D1_ALPHA_MODE_IGNORE per una destinazione di rendering, la modalità di anti-aliasing del testo passa automaticamente da D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE a D2D1_TEXT_ANTIALIAS_MODE GRAYSCALE. (Quando si specifica una modalità alfa di D2D1_ALPHA_MODE_UNKNOWN, Direct2D imposta automaticamente l'alfa, a seconda del tipo di destinazione di rendering.

È possibile utilizzare il metodo SetTextAntialiasMode per modificare la modalità antialias del testo in D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE, ma il rendering del testo ClearType in una superficie trasparente può creare risultati imprevedibili. Se si desidera eseguire il rendering del testo ClearType in una destinazione di rendering trasparente, è consigliabile usare una delle due tecniche seguenti.

  • Utilizzare il metodo PushAxisAlignedClip per ritagliare la destinazione di rendering nell'area in cui verrà eseguito il rendering del testo, quindi chiamare il metodo Clear e specificare un colore opaco, quindi eseguire il rendering del testo.
  • Utilizzare DrawRectangle per disegnare un rettangolo opaco dietro l'area in cui verrà eseguito il rendering del testo.

D2D1_PIXEL_FORMAT

D2D1_ALPHA_MODE

DXGI_FORMAT