Compartir a través de


Efecto de escala

Use este efecto para escalar o reducir verticalmente una imagen. El efecto tiene seis modos de escalado: vecino más cercano, lineal, cúbico, lineal de múltiples muestras, anisotrópicos y cúbica de alta calidad.

El CLSID de este efecto es CLSID_D2D1Scale.

Imagen de ejemplo

En este ejemplo se muestra el zoom del efecto de escala en 2 veces la entrada y el recorte al tamaño original.

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

scaleEffect->SetInput(0, bitmap);

scaleEffect->SetValue(D2D1_SCALE_PROP_CENTER_POINT, D2D1::Vector2F(256.0f, 192.0f));
scaleEffect->SetValue(D2D1_SCALE_PROP_SCALE, D2D1::Vector2F(2.0f, 2.0f));

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

Propiedades de efecto

Enumeración de nombre para mostrar e índice Descripción
Escala
D2D1_SCALE_PROP_SCALE
La cantidad de escala en la dirección X e Y como una relación del tamaño de salida con el tamaño de entrada. Esta propiedad es una D2D1_VECTOR_2Fdefined 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}.
CenterPoint
D2D1_SCALE_PROP_CENTER_POINT
Punto central de escalado de imágenes. Esta propiedad es un D2D1_VECTOR_2F definido como: (punto X, punto Y). Las unidades están en DIP.
Use la propiedad de punto central para escalar alrededor de un punto distinto de la esquina superior izquierda.
El tipo es D2D1_VECTOR_2F.
El valor predeterminado es {0.0f, 0.0f}.
BorderMode
D2D1_SCALE_PROP_BORDER_MODE
Modo utilizado para calcular el borde de la imagen, suave o dura. Consulta Modos de borde para obtener más información.
El tipo es D2D1_BORDER_MODE.
El valor predeterminado es D2D1_BORDER_MODE_SOFT.
Nitidez
D2D1_SCALE_PROP_SHARPNESS
En el modo de interpolación cúbica de alta calidad, el nivel de nitidez del filtro de escalado como un flotador entre 0 y 1. Los valores no tienen unidad. Puede usar la nitidez para ajustar la calidad de una imagen al reducir verticalmente 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.
InterpolationMode
D2D1_SCALE_PROP_INTERPOLATION_MODE
Modo de interpolación que usa el efecto para escalar la imagen. Hay 6 modos de escala que varían en calidad y velocidad. Consulta Modos de interpolación para obtener más información.
El tipo es D2D1_SCALE_INTERPOLATION_MODE.
El valor predeterminado es D2D1_SCALE_INTERPOLATION_MODE_LINEAR.

Modos de borde

Nombre Descripción
D2D1_BORDER_MODE_SOFT El efecto rellena la imagen de entrada con píxeles negros transparentes para muestras fuera de los límites de entrada cuando aplica el kernel de convolución. Esto crea un borde suave para la imagen y, en el proceso, expande el mapa de bits de salida según el tamaño del kernel.
D2D1_BORDER_MODE_HARD El efecto extiende la imagen de entrada con una transformación de borde de tipo reflejado para muestras fuera de los límites de entrada. El tamaño del mapa de bits de salida es igual al tamaño del mapa de bits de entrada.

`

Modos de interpolación

Enumeración Descripción
D2D1_SCALE_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_SCALE_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_SCALE_INTERPOLATION_MODE_CUBIC Usa un kernel cúbico de 16 muestras para la interpolación. Este modo usa el mayor tiempo de procesamiento, pero genera una imagen de mayor calidad.
D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Usa 4 muestras lineales dentro de un solo píxel para un buen suavizado de contorno perimetral. Este modo es bueno para reducir verticalmente por pequeñas cantidades en imágenes con pocos píxeles.
D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC Usa el filtrado anisotrópico para muestrear un patrón según la forma transformada del mapa de bits.
D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC Usa un kernel cúbico de alta calidad de tamaño variable para realizar una escalabilidad previa de la imagen si el escalado descendente está implicado 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_SCALE_INTERPOLATION_MODE_LINEAR.

Nota

El modo Anisotrópico genera mapas MIP al escalar, sin embargo, si establece la propiedad Cached en true 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

La ubicación y el tamaño del mapa de bits de salida dependen del factor de escala especificado y del punto central.

Puede calcular el tamaño del mapa de bits de salida mediante esta ecuación:

BitmapSizex(Pixels)=Scalex*Original Bitmap Sizex (DIPs)*(UserDPI/96)
BitmapSizey(Pixels)=Scaley*Original Bitmap Sizey (DIPs)*(UserDPI/96)

El efecto redondea las fracciones de píxeles hasta el píxel entero más cercano.

La ubicación del mapa de bits es (0, 0) o el valor de la propiedad de punto central.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 y Platform Update para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo compatible 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