Efecto de matriz de convolución
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 del efecto
- Modos Escalar
- Modos de borde
- Mapa de bits de salida
- Requisitos
- Temas relacionados
Imagen de ejemplo
En el ejemplo siguiente se muestra la entrada y salida del efecto de matriz de convolución 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 del efecto
Nombre para mostrar y enumeración del índice | Descripción |
---|---|
KernelUnitLength D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH |
El 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 Escalar 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 |
El 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 |
El alto máximo de la matriz 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 flotantes. El primer conjunto de números kernelSizeX de FLOAT[] corresponde a la primera fila del kernel. El segundo conjunto de números kernelSizeX corresponde a la segunda fila y así sucesivamente hasta las filas KernelSizeY. 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. |
Bias 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 establece esta opción en VERDADERO, el kernel de convolución solo se aplica a los canales de color. Si establece esto en FALSO, el kernel de convolución se aplica a todos los canales. El tipo es BOOL. El valor predeterminado es FALSO. |
BorderMode D2D1_CONVOLVEMATRIX_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. |
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 premultiplique el alfa. Si establece esto en VERDADERO, el efecto fijará los valores. Si se establece en FALSO, 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 FALSO. |
Modos Escalar
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 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 |