Efecto de transformación afín 2D

El efecto de transformación afín 2D aplica una transformación espacial a una imagen basada en una matriz 3X2 mediante la transformación de matriz Direct2D y cualquiera de los seis modos de interpolación. Puede usar este efecto para girar, escalar, asimetría o traducir una imagen. O bien, puede combinar estas operaciones. Las transferencias afines conservan las líneas paralelas y la relación de distancias entre los tres puntos de una imagen.

El CLSID de este efecto es CLSID_D2D12DAffineTransform.

Imagen de ejemplo

Antes
La imagen antes del efecto.
Después
La imagen después de la transformación.
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInput(0, bitmap);

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f,   0.1f, 0.9f,   8.0f, 45.0f);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();

Este efecto realiza esta operación de matriz:

operación de matriz afín

Aunque la matriz de entrada se define como una matriz de 3x2, la última columna se rellena con 0, 0 y 1 para generar una matriz cuadrada. Esto permite la multiplicación de matrices, de modo que las transformaciones se puedan concatenar en una sola matriz.

Propiedades del efecto

Nombre para mostrar y enumeración del índice Descripción
InterpolationMode
D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE
Modo de interpolación que se usa para escalar la imagen. Hay 6 modos Escalar que varían en calidad y velocidad.
El tipo es D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE.
El valor predeterminado es D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE
Modo que se usa para calcular el borde de la imagen, suave o dura. Consulte Modos de borde para obtener más información.
El tipo es D2D1_BORDER_MODE.
El valor predeterminado es D2D1_BORDER_MODE_SOFT.
TransformMatrix
D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX
Matriz 3x2 para transformar la imagen mediante la transformación de matriz direct2D.
El tipo es D2D1_MATRIX_3X2_F.
El valor predeterminado es Matrix3x2F::Identity().
Nitidez
D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS
En el modo de interpolación cúbica de alta calidad, el nivel de nitidez del filtro de escalado es un float entre 0 y 1. Los valores no son unitarios. Puede usar la nitidez para ajustar la calidad de una imagen al escalar la imagen.
El factor de nitidez afecta a la forma del kernel. Cuanto mayor sea el factor de nitidez, menor será el kernel.
Nota: Esta propiedad afecta solo al modo de interpolación cúbica de alta calidad.
El tipo es FLOAT.
El valor predeterminado es 0.0f.

Modos de borde

Nombre Descripción
D2D1_BORDER_MODE_SOFT El efecto rellena la imagen con píxeles negros transparentes a medida que interpola, lo que da lugar a un borde suave.
D2D1_BORDER_MODE_HARD El efecto fija la salida al tamaño de la imagen de entrada.

Modos de interpolación

Enumeración Descripción
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Muestra el punto único más cercano y lo usa. Este modo usa menos tiempo de procesamiento, pero genera la imagen de menor calidad.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR Usa un ejemplo de cuatro puntos y una interpolación lineal. Este modo usa más tiempo de procesamiento que el modo vecino más cercano, pero genera una imagen de mayor calidad.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC Usa un kernel cúbico de 16 muestras para la interpolación. Este modo usa el tiempo de procesamiento más alto, pero genera una imagen de mayor calidad.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Usa 4 muestras lineales dentro de un solo píxel para un buen suavizado de contornos. Este modo es bueno para reducir verticalmente por pequeñas cantidades en imágenes con pocos píxeles.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Usa el filtrado anisotrópico para muestrear un patrón según la forma transformada del mapa de bits.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC Usa un kernel cúbico de alta calidad de tamaño variable para realizar una escala previa de la imagen si la reducción vertical está implicada en la matriz de transformación. A continuación, usa el modo de interpolación cúbica para la salida final.

Nota:

Si no selecciona un modo, el efecto tiene como valor predeterminado D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.

Nota:

El modo anisotrópico genera mapas MIP al escalar; sin embargo, si establece la propiedad Almacenado en memoria caché en verdadero en los efectos que se introducen en este efecto, los mapas MIP no se generarán cada vez para imágenes suficientemente pequeñas.

Mapa de bits de salida

El tamaño del mapa de bits de salida depende de la matriz de transformación que se aplica a la imagen.

El efecto realiza la operación de transformación y, a continuación, aplica un cuadro de límite alrededor del resultado. El mapa de bits de salida es el tamaño del cuadro de límite.

Requisitos

Requisito Valor
Cliente mínimo compatible Windows 8 y Platform Update para Windows 7 [aplicaciones de escritorio | aplicaciones de la Tienda Windows]
Servidor mínimo admitido Windows 8 y Platform Update para Windows 7 [aplicaciones de escritorio | aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect