Formatos de píxel admitidos y modos alfa
En este tema se describen los formatos de píxeles y los modos alfa admitidos por las distintas partes de Direct2D, incluidos cada tipo de destino de representación, ID2D1Bitmap e ID2D1ImageSource. Contiene las siguientes secciones:
- Formatos YUV admitidos para el origen de imagen DXGI
- Especificar un formato de píxel para un destino de representación
- Formatos admitidos para ID2D1HwndRenderTarget
- Formatos admitidos para ID2D1DeviceContext
- Formatos admitidos para el destino de representación compatible
- Formatos admitidos para el destino de representación de Surface DXGI
- Formatos admitidos para el destino de representación de mapa de bits wic
- Formatos admitidos para ID2D1DCRenderTarget
- Especificar un formato de píxel para un objeto ID2D1Bitmap
- Usar un formato no admitido
- Acerca de los modos alfa
- Temas relacionados
Formatos YUV admitidos para el origen de imagen DXGI
Id2D1ImageSource es un proveedor abstracto de píxeles. Se puede crear una instancia desde WIC (CreateImageSourceFromWic o idXGISurface (CreateImageSourceFromDxgi).
ID2D1ImageSourceFromWic admite el mismo conjunto de formatos de píxeles y modos alfa que ID2D1Bitmap.
Además de lo anterior, un ID2D1ImageSource al que se crea una instancia de IDXGISurface también admite algunos formatos de píxeles YUV, incluidos los datos planos divididos en varias superficies. Consulte CreateImageSourceFromDxgi para obtener más información sobre los requisitos de cada formato de píxel.
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 |
Especificar un formato de píxel para un destino de representación
Al crear un destino de representación, debe especificar su formato de píxel. Para especificar el formato de píxel, se usa una estructura de D2D1_PIXEL_FORMAT para establecer el miembro pixelFormat de una estructura de D2D1_RENDER_TARGET_PROPERTIES . A continuación, pase esa estructura al método Create adecuado, como ID2D1Factory::CreateHwndRenderTarget.
La estructura D2D1_PIXEL_FORMAT tiene dos campos:
- format, un valor de DXGI_FORMAT que describe el tamaño y la disposición de los canales en cada píxel, y
- alpha, un valor de D2D1_ALPHA_MODE que describe cómo se interpreta la información alfa.
En el ejemplo siguiente se crea una estructura D2D1_PIXEL_FORMAT y se usa para especificar el formato de píxel y el modo alfa de 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
);
Los diferentes destinos de representación admiten diferentes combinaciones de formato y modo alfa. En las secciones siguientes se enumeran las combinaciones de formato y alfa admitidas por cada destino de representación.
Formatos admitidos para ID2D1HwndRenderTarget
Los formatos admitidos para un ID2D1HwndRenderTarget dependen de si se representa mediante hardware o software, o si Direct2D controla el modo de representación automáticamente de forma predeterminada.
Nota
Se recomienda usar DXGI_FORMAT_B8G8R8A8_UNORM como formato de píxel para mejorar el rendimiento. Esto es especialmente útil para los destinos de representación de software. Los destinos de formato BGRA funcionan mejor que los formatos RGBA.
Al crear un ID2D1HwndRenderTarget, se usa la estructura D2D1_RENDER_TARGET_PROPERTIES para especificar las opciones de representación. Las opciones incluyen el formato de píxel, como se indicó en la sección anterior. El campo de tipo de esta estructura permite especificar si el destino de representación se representa en hardware o software, o si Direct2D debe determinar automáticamente el modo de representación.
Para habilitar Direct2D para determinar si el destino de representación usa la representación de hardware o software, use la configuración de D2D1_RENDER_TARGET_TYPE_DEFAULT .
En la tabla siguiente se enumeran los formatos admitidos para los objetos ID2D1HwndRenderTarget creados mediante la configuración de D2D1_RENDER_TARGET_TYPE_DEFAULT .
Formato | Modo 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 |
Para forzar que un destino de representación use la representación de hardware, use la configuración de D2D1_RENDER_TARGET_TYPE_HARDWARE . En la tabla siguiente se enumeran los formatos admitidos para los objetos ID2D1HwndRenderTarget que usan explícitamente la representación de hardware.
Formato | Modo 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 |
Para forzar que un destino de representación use la representación de software, use la configuración de D2D1_RENDER_TARGET_TYPE_SOFTWARE . En la tabla siguiente se enumeran los formatos admitidos para los objetos ID2D1HwndRenderTarget que usan explícitamente la representación de software.
Formato | Modo 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 |
Independientemente de si id2D1HwndRenderTarget está acelerado por hardware, el formato de DXGI_FORMAT_UNKNOWN usa DXGI_FORMAT_B8G8R8A8 de forma predeterminada y el modo alfa de D2D1_ALPHA_MODE_UNKNOWN usa D2D1_ALPHA_MODE_IGNORE de forma predeterminada.
Formatos admitidos para ID2D1DeviceContext
A partir de Windows 8 el contexto del dispositivo aprovecha más de los formatos de color alto de Direct3D, como:
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_R16G16B16A16_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R32G32B32A32_FLOAT
Use el método ID2D1DeviceContext::IsDxgiFormatSupported para ver si un formato funciona en un contexto de dispositivo determinado. Estos formatos también pueden funcionar en un ID2D1HwndRenderTarget.
Estos formatos se agregan a los formatos admitidos por la interfaz ID2D1HwndRenderTarget en Windows 7. Consulte Dispositivos y contextos de dispositivo para obtener más información.
Formatos admitidos para el destino de representación compatible
Un destino de representación compatible (un id2D1BitmapRenderTarget creado por uno de los métodos ID2D1RenderTarget::CreateCompatibleRenderTarget ) hereda los formatos admitidos y los modos alfa del destino de representación que lo creó. Un destino de representación compatible también admite las siguientes combinaciones de formato y modo alfa, independientemente de lo que admita su elemento primario.
Formato | Modo alfa |
---|---|
DXGI_FORMAT_A8_UNORM | D2D1_ALPHA_MODE_PREMULTIPLIED |
DXGI_FORMAT_A8_UNORM | D2D1_ALPHA_MODE_STRAIGHT |
DXGI_FORMAT_UNKNOWN | D2D1_ALPHA_MODE_UNKNOWN |
El formato DXGI_FORMAT_UNKNOWN usa el formato de destino de representación primario de forma predeterminada y el modo alfa de D2D1_ALPHA_MODE_UNKNOWN usa D2D1_ALPHA_MODE_PREMULTIPLIED de forma predeterminada.
Formatos admitidos para el destino de representación de Surface DXGI
Un destino de representación DXGI es un ID2D1RenderTarget creado por uno de los métodos ID2D1Factory::CreateDxgiSurfaceRenderTarget . Admite las siguientes combinaciones de formato y modo alfa.
Formato | Modo 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
El formato debe coincidir con el formato de la superficie DXGI a la que dibuja el destino de representación de la superficie DXGI.
El formato DXGI_FORMAT_UNKNOWN usa el formato de superficie DXGI de forma predeterminada. No utilice el modo alfa de D2D1_ALPHA_MODE_UNKNOWN con un destino de representación de superficie DXGI. No tiene ningún valor predeterminado y hará que se produzca un error en la creación del destino de representación de superficie DXGI.
Formatos admitidos para el destino de representación de mapa de bits wic
Un destino de representación de mapa de bits wic es un id2D1RenderTarget creado por uno de los métodos ID2D1Factory::CreateWicBitmapRenderTarget . Admite las siguientes combinaciones de formato y modo alfa.
Formato | Modo 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 |
El formato de píxel del destino de mapa de bits WIC debe coincidir con el formato de píxel del mapa de bits WIC.
El formatoDXGI_FORMAT_UNKNOWN usa el formato de mapa de bits WIC de forma predeterminada y el modo alfa de D2D1_ALPHA_MODE_UNKNOWN usa el modo alfa de mapa de bits WIC de forma predeterminada.
Formatos admitidos para ID2D1DCRenderTarget
Un ID2D1DCRenderTarget admite las siguientes combinaciones de formato y modo alfa.
Formato | Modo alfa |
---|---|
DXGI_FORMAT_B8G8R8A8_UNORM | D2D1_ALPHA_MODE_PREMULTIPLIED |
DXGI_FORMAT_B8G8R8A8_UNORM | D2D1_ALPHA_MODE_IGNORE |
No use el formato DXGI_FORMAT_UNKNOWN ni el modo alfa de D2D1_ALPHA_MODE_UNKNOWN con un ID2D1DCRenderTarget. No tiene ningún valor predeterminado y hará que se produzca un error en la creación de ID2D1DCRenderTarget .
Especificar un formato de píxel para un objeto ID2D1Bitmap
Por lo general, los objetos ID2D1Bitmap admiten los siguientes formatos y modos alfa (con algunas restricciones, que se describen en los párrafos siguientes).
Formato | Modo 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 y versiones posteriores) | D2D1_ALPHA_MODE_IGNORE |
DXGI_FORMAT_BC1_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_PREMULTIPLIED |
DXGI_FORMAT_BC1_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_IGNORE |
DXGI_FORMAT_BC1_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_UNKNOWN |
DXGI_FORMAT_BC2_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_PREMULTIPLIED |
DXGI_FORMAT_BC2_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_IGNORE |
DXGI_FORMAT_BC2_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_UNKNOWN |
DXGI_FORMAT_BC3_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_PREMULTIPLIED |
DXGI_FORMAT_BC3_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_IGNORE |
DXGI_FORMAT_BC3_UNORM (solo Windows 8.1 y versiones posteriores) | D2D1_ALPHA_MODE_UNKNOWN |
Cuando se usa el método ID2D1RenderTarget::CreateSharedBitmap , se usa el campo pixelFormat de una estructura de D2D1_BITMAP_PROPERTIES para especificar el formato de píxel del nuevo destino de representación. Debe coincidir con el formato de píxel del origen ID2D1Bitmap .
Cuando se usa el método CreateBitmapFromWicBitmap , se usa el campo pixelFormat de una estructura de D2D1_BITMAP_PROPERTIES (en lugar del miembro pixelFormat de una estructura D2D1_RENDER_TARGET_PROPERTIES ) para especificar el formato de píxel del nuevo destino de representación. Debe coincidir con el formato de píxel del origen del mapa de bits WIC.
Nota
Para obtener más información sobre la compatibilidad con formatos de píxeles comprimidos en bloques (BCn), consulte Compresión de bloques.
Formatos WIC admitidos
Cuando usas el método CreateBitmapFromWicBitmap para crear un mapa de bits a partir de un mapa de bits WIC, o cuando usas el método CreateSharedBitmap con un IWICBitmapLock, el origen wiC debe estar en un formato compatible con Direct2D.
Formato WIC | Formato DXGI correspondiente | Modo alfa correspondiente |
---|---|---|
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 |
Para obtener un ejemplo en el que se muestra cómo convertir un mapa de bits WIC a un formato compatible, vea Cómo cargar un mapa de bits desde un archivo.
Usar un formato no admitido
El uso de cualquier combinación distinta de los formatos de píxeles y modos alfa que se enumeran en las tablas anteriores produce un error de D2DERR_UNSUPPORTED_PIXEL_FORMAT o de E_INVALIDARG .
Acerca de los modos alfa
Acerca de los modos alfa premultiplicados y rectos
La enumeración D2D1_ALPHA_MODE indica si el canal alfa usa alfa premultiplicado, alfa recto o debe omitirse y considerarse opaco. Con alfa recto, el canal alfa indica un valor que corresponde a la transparencia de un color.
Los colores siempre se tratan como alfa rectos mediante comandos de dibujo y pinceles direct2D, independientemente del formato de destino.
Con alfa premultiplicado, cada canal de color se escala mediante el valor alfa. Normalmente, ningún valor de canal de color es mayor que el valor del canal alfa. Si un valor de canal de color en un formato multiplicado previamente es mayor que el canal alfa, el origen estándar de la combinación matemática crea una mezcla aditiva.
El valor del canal alfa es el mismo en alfa recto y pre multiplicado.
Diferencias entre alfa recto y premultiplicado
Al describir un color RGBA mediante alfa recto, el valor alfa del color se almacena en el canal alfa. Por ejemplo, para describir un color rojo que es 60 % opaco, use los valores siguientes: (255, 0, 0, 255 * 0,6) = (255, 0, 0, 153). El valor 255 indica rojo completo y 153 (que es el 60 por ciento del 255) indica que el color debe tener una opacidad del 60 por ciento.
Al describir un color RGBA mediante alfa premultiplicado, cada color se multiplica por el valor alfa: (255 * 0,6, 0 * 0,6, 0 * 0,6, 255 * 0,6) = (153, 0, 0, 153).
Independientemente del modo alfa del destino de representación, los valores de D2D1_COLOR_F siempre se interpretan como alfa recto. Por ejemplo, al especificar el color de un ID2D1SolidColorBrush para su uso con un destino de representación que usa el modo alfa premultiplicado, especifique el color como lo haría si el destino de representación usara alfa recto. Al pintar con el pincel, Direct2D traduce el color al formato de destino automáticamente.
Modo alfa para destinos de representación
Independientemente de la configuración del modo alfa, el contenido de un destino de representación admite transparencia. Por ejemplo, si dibuja un rectángulo rojo parcialmente transparente con un destino de representación con un modo alfa de D2D1_ALPHA_MODE_IGNORE, el rectángulo aparecerá rosa (si el fondo es blanco).
Si dibuja un rectángulo rojo parcialmente transparente cuando el modo alfa es D2D1_ALPHA_MODE_PREMULTIPLIED, el rectángulo aparecerá rosa (suponiendo que el fondo es blanco) y puede verlo a lo que esté detrás del destino de representación. Esto resulta útil cuando se usa un ID2D1DCRenderTarget para representarlo en una ventana transparente o cuando se usa un destino de representación compatible (un destino de representación creado por el método CreateCompatibleRenderTarget ) para crear un mapa de bits que admita transparencia.
Modos ClearType y Alfa
Si especifica un modo alfa distinto de D2D1_ALPHA_MODE_IGNORE para un destino de representación, el modo de suavizado de contorno de texto cambia automáticamente de D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE a D2D1_TEXT_ANTIALIAS_MODE GRAYSCALE. (Cuando se especifica un modo alfa de D2D1_ALPHA_MODE_UNKNOWN, Direct2D establece el alfa para usted, según el tipo de destino de representación).
Puede usar el método SetTextAntialiasMode para volver a cambiar el modo antialias de texto a D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE, pero la representación del texto ClearType en una superficie transparente puede crear resultados imprevisibles. Si desea representar texto ClearType en un destino de representación transparente, se recomienda usar una de las dos técnicas siguientes.
- Use el método PushAxisAlignedClip para recortar el destino de representación en el área donde se representará el texto, luego llame al método Clear y especifique un color opaco y, a continuación, represente el texto.
- Use DrawRectangle para dibujar un rectángulo opaco detrás del área donde se representará el texto.
Temas relacionados