Condividi tramite


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. Include 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 riportato, 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 specificare 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 la 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
  • alpha, un 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 OGGETTO 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. Le sezioni seguenti elencano 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 del software. Le destinazioni di formato BGRA offrono prestazioni migliori rispetto ai formati RGBA.

 

Quando si crea un ID2D1HwndRenderTarget, si usa 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 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 abilitare Direct2D per 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 usare il 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 l'uso del rendering di una destinazione di rendering, 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 l'ID2D1HwndRenderTarget sia accelerato dall'hardware, il formato 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 del dispositivo sfrutta più dei 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 determinato contesto del dispositivo. Questi formati possono funzionare anche in un ID2D1HwndRenderTarget.

Questi formati sono oltre 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

Destinazione di rendering compatibile (un oggetto ID2D1BitmapRenderTarget creato da uno dei metodi ID2D1RenderTarget::CreateCompatibleRenderTarget ) eredita i formati e le modalità alfa supportate della destinazione di rendering creata. Una destinazione di rendering compatibile supporta anche le combinazioni di formato e 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 del 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 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 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 formatoDXGI_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

Un ID2D1DCRenderTarget supporta le combinazioni di formato e 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 un ID2D1DCRenderTarget. Non ha alcun valore predefinito e causerà l'esito negativo della creazione 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 si usa il metodo ID2D1RenderTarget::CreateSharedBitmap , usare 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 si usa il metodo CreateBitmapFromWicBitmap , usare 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 di pixel compressi (BCn), vedere Compressione dei blocchi.

 

Formati WIC supportati

Quando si usa il metodo CreateBitmapFromWicBitmap per creare una bitmap da una bitmap WIC o quando si usa 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 premultiplied e dritte

L'enumerazione D2D1_ALPHA_MODE indica se il canale alfa usa alfa premultiplied, alfa dritto o deve essere ignorato e considerato opaco. Con alfa dritto, il canale alfa indica un valore che corrisponde alla modalità di trasparenza di un colore.

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

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

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

Differenze tra alfa dritto e premultiplied

Quando si descrive un colore RGBA usando 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 il 153 (ovvero il 60% del 255) indica che il colore deve avere un'opacità del 60%.

Quando si descrive un colore RGBA usando alfa premultiplied, ogni colore viene moltiplicato in base al 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 ID2D1SolidColorBrush per l'uso con una destinazione di rendering che usa la modalità alfa premultiplied, specificare il colore proprio come se la destinazione di rendering usasse l'alfa dritta. Quando si dipinge con il pennello, Direct2D traduce 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 verrà visualizzato rosa (se lo sfondo è bianco).

Se si disegna 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 qualsiasi cosa sia 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 supporta 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à antialiasing del testo cambia 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 l'alfa per l'utente, a seconda del tipo di destinazione di rendering.

È possibile usare il metodo SetTextAntialiasMode per modificare la modalità antialias di testo in D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE, ma il rendering del testo ClearType in una superficie trasparente può creare risultati imprevedibili. Se si vuole 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.
  • Usare 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