Question

La méthode ci-dessous, prend une matrice de couleur et il applique à l'image fournie. Il y a deux ou trois choses à dire:

(1) Il n'est pas une fonction
(2) La même image est utilisé pour créer l'objet graphique, et en tant que source de la méthode de 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

Je ne sais pas si c'est une mauvaise pratique de ne pas créer un autre bitmap pour rendre l'image finale en, mais la chose étrange est la méthode fonctionne bien pour un ajustement de la balance des couleurs (Matrix30, 31 et 32), mais ne fait rien pour un réglage d'opacité (Matrix33).

Qu'est-ce qui se passe?

Était-ce utile?

La solution

Si Je comprends bien votre question: vous demandez pourquoi vous ne pouvez pas modifier le canal alpha avec cette méthode? (Pourquoi il devrait être une fonction au lieu d'un sous me elludes complètement.)

Mais pourquoi il ne fonctionne pas comme vous pouvez vous attendre avec opactiy / transparence, je comprends parfaitement. : -)

La méthode .DrawImage (en combinaison avec les ImageAttributes) attirerai chaque pixel modifié sur elle-même (car la largeur et la hauteur sont les mêmes). Notez qu'il sera dessiner - pas REMPLACER . Cela signifie que la valeur de pixel original blend avec la valeur de pixel nouvellement calculée. Entre autres choses, cela signifie que s'il n'y a pas la manière que cela changera pixel d'origine si complètement opaque,. Peinture avec une couleur partiellement transpararent sur quelque chose d'opaque sera toujours yieald une couleur opaque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top