Efecto de matriz convoluante
Use el efecto de matriz de convolve para aplicar un kernel 2D arbitrario a una imagen. Puede usar este efecto para desenfocar, detectar bordes, relieves o afilar una imagen.
El CLSID de este efecto es CLSID_D2D1ConvolveMatrix.
- imagen de ejemplo
- propiedades Effect
- modos de escalado
- modos de borde
- de mapa de bits de salida
- requisitos de
- temas relacionados
Imagen de ejemplo
En el ejemplo siguiente se muestra la entrada y salida del efecto de matrizvolva con un kernel de 3 x 3.
Antes |
---|
![]() |
Después |
![]() |
ComPtr<ID2D1Effect> convolveMatrixEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ConvolveMatrix, &convolveMatrixEffect);
convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(convolveMatrixEffect.Get());
m_d2dContext->EndDraw();
Propiedades de efecto
Enumeración de índice y nombre para mostrar | Descripción |
---|---|
KernelUnitLength D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH |
Tamaño de una unidad en el kernel. Las unidades están en (DIP/unidad de kernel), donde una unidad de kernel es el tamaño del elemento en el kernel de convolución. Un valor de 1 (UNIDAD DIP/kernel) corresponde a un píxel de una imagen con 96 PPP. El tipo es FLOAT. El valor predeterminado es 1.0f. |
ScaleMode D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE |
Modo de interpolación que usa el efecto para escalar la imagen a la longitud de la unidad de kernel correspondiente. Hay seis modos de escala que varían en calidad y velocidad. El tipo es D2D1_CONVOLVEMATRIX_SCALE_MODE. El valor predeterminado es D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR. |
KernelSizeX D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X |
Ancho de la matriz del kernel. Las unidades se especifican en unidades de kernel. El tipo es UINT32. El valor predeterminado es 3. |
KernelSizeY D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y |
Alto de la matriz del kernel. Las unidades se especifican en unidades de kernel. El tipo es UINT32. El valor predeterminado es 3. |
KernelMatrix D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX |
Matriz del kernel que se va a aplicar a la imagen. Los elementos kernel no están enlazados y se especifican como floats. El primer conjunto de KernelSizeX números de FLOAT[] corresponde a la primera fila del kernel. El segundo conjunto de números de KernelSizeX corresponde a la segunda fila, y así sucesivamente hasta KernelSizeY filas. El tipo es FLOAT[]. El valor predeterminado es {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}. |
Divisor D2D1_CONVOLVEMATRIX_PROP_DIVISOR |
La matriz del kernel se aplica a un píxel y, a continuación, el resultado se divide por este valor. 0 se comporta como un valor de epsilon float. El tipo es FLOAT. El valor predeterminado es 1.0f. |
Predisposición D2D1_CONVOLVEMATRIX_PROP_BIAS |
El efecto aplica la matriz del kernel, el divisor y, a continuación, el sesgo se agrega al resultado. El sesgo no está enlazado y sin unidad. El tipo es FLOAT. El valor predeterminado es 0,0f. |
KernelOffset D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET |
Desplaza el kernel de convolución desde una posición centrada en el píxel de salida a una posición que especifique izquierda/derecha y arriba/abajo. El desplazamiento se define en unidades de kernel. Con algunos desplazamientos y tamaños de kernel, los ejemplos del kernel de convolución no se colocarán en un centro de imágenes de píxeles. Los valores de píxeles del ejemplo de kernel se calculan mediante interpolación bilineal. El tipo es D2D1_VECTOR_2F. El valor predeterminado es {0.0f, 0.0f}. |
PreserveAlpha D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA |
Especifica si el kernel de convolución se aplica al canal alfa o solo a los canales de color. Si se establece en TRUE el kernel de convolución solo se aplica a los canales de color. Si establece esta opción en FALSE el kernel de convolución se aplica a todos los canales. El tipo es BOOL. El valor predeterminado es FALSE. |
BorderMode D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE |
Modo que se usa 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. |
ClampOutput D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT |
Si el efecto fija los valores de color a entre 0 y 1 antes de que el efecto pase los valores al siguiente efecto del gráfico. El efecto fija los valores antes de que premultipe el alfa . Si establece esto en TRUE, el efecto fijará los valores. Si se establece en FALSE, el efecto no sujetará los valores de color, pero otros efectos y la superficie de salida pueden sujetar los valores si no son de precisión suficiente. El tipo es BOOL. El valor predeterminado es FALSE. |
Modos de escalado
Enumeración | Descripción |
---|---|
D2D1_CONVOLVEMATRIX_SCALE_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_CONVOLVEMATRIX_SCALE_MODE_LINEAR | Usa un ejemplo de cuatro puntos y una interpolación lineal. Este modo genera una imagen de mayor calidad que el modo vecino más cercano. |
D2D1_CONVOLVEMATRIX_SCALE_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_CONVOLVEMATRIX_SCALE_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_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC | Usa el filtrado anisotrópico para muestrear un patrón según la forma transformada del mapa de bits. |
D2D1_CONVOLVEMATRIX_SCALE_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 se establece de forma predeterminada en D2D1_CONVOLVEMATRIX_SCALE_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 por 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. |
Mapa de bits de salida
El tamaño de la salida del efecto depende del tamaño del kernel de convolución, el desplazamiento del kernel, la longitud de la unidad de kernel y la configuración del modo de borde.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo admitido | 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 |