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
- Propiedades del efecto
- Modos de borde
- Modos de interpolación
- Mapa de bits de salida
- Requisitos
- Temas relacionados
Imagen de ejemplo
Antes |
---|
Después |
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:
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 |