Pregunta

El método a continuación, realiza una matriz de color y lo aplica a la imagen suministrada. Hay un par de cosas a tener en cuenta:

(1) No es una función
(2) La misma imagen se utiliza para crear el objeto gráfico, y como la fuente del método DrawImage.

Public Sub ApplyMatrixToImage(ByVal matrix As ColorMatrix, ByVal image As Image)
    Using atts As New ImageAttributes
        atts.SetColorMatrix(matrix)
        Using g As Graphics = Graphics.FromImage(image)
            Dim width As Integer = image.Width
            Dim height As Integer = image.Height
            Dim rect As New Rectangle(0, 0, width, height)
            g.DrawImage(image, rect, 0, 0, width, height, GraphicsUnit.Pixel, atts)
        End Using
    End Using
End Sub

No sé si se trata de una mala práctica de no crear otro mapa de bits para representar la imagen final en, pero lo extraño es que el método funciona bien para un ajuste de balance de color (Matrix30, 31 y 32), pero no hace nada por un ajuste de opacidad (Matrix33).

¿Qué está pasando?

¿Fue útil?

Solución

entiendo bien su pregunta: usted está preguntando por qué no puede alterar el canal alfa con este método? (¿Por qué debería ser una función en lugar de una sub me elludes completamente.)

Pero ¿por qué no funciona como se puede esperar con opactiy / transparencia entiendo perfectamente. : -)

El método .DrawImage (combinado con los ImageAttributes) dibujará cada píxel alterada sobre sí misma (ya que la anchura y la altura son los mismos). Tenga en cuenta que va a dibujar - no Reemplazar . Esto significa que el valor original del píxel mezclar con el valor de píxel recién calculado. Entre otras cosas, esto significa que si el píxel original si completamente opaca, no hay manera de que esto cambiará. La pintura con un color parcialmente transpararent por algo opaca seguirá siendo yieald un color opaco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top