Efecto de origen del mapa de bits

Use el efecto de origen del mapa de bits para generar un ID2D1Image a partir de IWICBitmapSource para usarlo como entrada en un gráfico de efectos. Este efecto realiza el escalado y la rotación en la CPU. También puede generar opcionalmente un mapa mip de memoria del sistema, que puede ser una optimización del rendimiento para escalar imágenes muy grandes activamente en varias resoluciones reducidas.

Nota:

El efecto de origen del mapa de bits toma su entrada como una propiedad, no como entrada de imagen. Debe usar el método SetValue , no el método SetInput . La propiedad WicBitmapSource es donde se especifican los datos de entrada de la imagen.

El CLSID de este efecto es CLSID_D2D1BitmapSource.

Propiedades de efecto

Enumeración de índice y nombre para mostrar Descripción
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
IWICBitmapSource que contiene los datos de imagen que se van a cargar.
El tipo es IWICBitmapSource.
El valor predeterminado es NULL.
Escala
D2D1_BITMAPSOURCE_PROP_SCALE
Cantidad de escala en la dirección X e Y. El efecto multiplica el ancho por el valor X y el alto por el valor Y. Esta propiedad es un D2D1_VECTOR_2F definido como: (escala X, escala Y). Las cantidades de escala son FLOAT, sin unidad y deben ser positivas o 0.
El tipo es D2D1_VECTOR_2F.
El valor predeterminado es {1.0f, 1.0f}.
InterpolationMode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Modo de interpolación que se usa para escalar la imagen. Consulta Modos de interpolación para obtener más información.
Si el modo deshabilita el mapa mip, BitmapSouce almacenará en caché la imagen en la resolución determinada por las propiedades Scale y EnableDPICorrection.
El tipo es D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
El valor predeterminado es D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Si establece esto en TRUE, el efecto escalará la imagen de entrada para convertir el PPP notificado por IWICBitmapSource en el PPP del contexto del dispositivo. El efecto usa el modo de interpolación establecido con la propiedad InterpolationMode. Si establece esto en FALSE, el efecto usa un valor de PPP de 96.0 para la imagen de salida.
El tipo es BOOL.
El valor predeterminado es FALSE.
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
Modo alfa de la salida. Esto puede ser premultiplido o recto. Consulta Modos alfa para obtener más información.
El tipo es D2D1_BITMAPSOURCE_ALPHA_MODE.
El valor predeterminado es D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Orientación
D2D1_BITMAPSOURCE_PROP_ORIENTATION
Operación de volteo o rotación que se va a realizar en la imagen. Consulta Orientación para obtener más información.
El tipo es D2D1_BITMAPSOURCE_ORIENTATION.
El valor predeterminado es D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Modos de interpolación

El efecto interpola el uso de este modo cuando escala una imagen o cuando corrige el PPP. Los modos de interpolación que usa este efecto se calculan mediante la CPU, no la GPU.

Nombre Descripción
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Muestra el punto único más cercano y lo usa. No genera un mapa mip.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Usa una interpolación lineal y una muestra de cuatro puntos. No genera un mapa mip.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Usa un kernel cúbico de 16 muestras para la interpolación. No genera un mapa mip.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Usa la interpolación de ventiladores WIC, igual que la interfaz IWICBitmapScaler . No genera un mapa mip.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Genera la cadena mipmap en la memoria del sistema mediante la interpolación bilineal. Para cada mapa mip, el efecto se escala al múltiplo más cercano de 0,5 mediante la interpolación bilineal y, a continuación, escala la cantidad restante mediante interpolación lineal.

Orientación

La propiedad Orientation se puede usar para aplicar una marca de orientación EXIF insertada dentro de una imagen.

Nombre Descripción
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT Predeterminada. El efecto no cambia la orientación de la entrada.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Voltea la imagen horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Gira la imagen en el sentido de las agujas del reloj 180 grados.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Gira la imagen en el sentido de las agujas del reloj 180 grados y la voltea horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Gira la imagen en el sentido de las agujas del reloj 270 grados y la voltea horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Gira la imagen en el sentido de las agujas del reloj 90 grados.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Gira la imagen en el sentido de las agujas del reloj 90 grados y la voltea horizontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Gira la imagen en el sentido de las agujas del reloj 270 grados.

Este fragmento de código muestra cómo convertir de valores de orientación EXIF (definidos en propkey.h) a D2D1_BITMAPSOURCE_ORIENTATION valores.

#include <propkey.h>
#include <d2d1effects.h>

D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
       switch (PhotoOrientation)
       {
       case PHOTO_ORIENTATION_NORMAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       case PHOTO_ORIENTATION_FLIPHORIZONTAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE180:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
       case PHOTO_ORIENTATION_FLIPVERTICAL:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_TRANSPOSE: 
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE270:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
       case PHOTO_ORIENTATION_TRANSVERSE:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
       case PHOTO_ORIENTATION_ROTATE90:
              return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
       default:
              return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
       }
}

Modos alfa

Nombre Descripción
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED La salida del efecto usa alfa premultiplido.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT La salida del efecto usa alfa recto.

Observaciones

Para optimizar el rendimiento al usar WIC y Direct2D juntos, debes usar IWICFormatConverter para convertir a un formato de píxel adecuado basado en el escenario de la aplicación y la precisión nativa de la imagen.

En la mayoría de los casos, la canalización direct2D de la aplicación solo requiere 8 bits por canal (bpc) de precisión, o la imagen solo proporciona 8 bpc precisión y, por lo tanto, debe convertir a GUID_WICPixelFormat32bppPBGRA. Sin embargo, si desea aprovechar la precisión adicional proporcionada por una imagen (por ejemplo, un JPEG-XR o TIFF almacenado con una precisión superior a 8 bpc), debe usar un formato de píxel basado en RGBA. En la tabla siguiente se proporcionan más detalles.

Precisión deseada Precisión nativa de la imagen Formato de píxel recomendado
8 bits por canal <= 8 bits por canal GUID_WICPixelFormat32bppPBGRA
Lo más alto posible <= 8 bits por canal GUID_WICPixelFormat32bppPBGRA
Lo más alto posible > 8 bits por canal Orden del canal RGBA, alfa premultiplicado

Dado que muchos formatos de imagen admiten varios niveles de precisión, debe usar IWICBitmapSource::GetPixelFormat para obtener el formato de píxel nativo de la imagen y, a continuación, usar IWICPixelFormatInfo para determinar cuántos bits por canal de precisión están disponibles para ese formato. Además, tenga en cuenta que no todos los hardware admiten formatos de píxeles de alta precisión. En esos casos, es posible que la aplicación tenga que recurrir al dispositivo WARP para admitir una alta precisión.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 y Actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo compatible Windows 8 y Actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect