Domanda

Il metodo seguito, prende una matrice di colori e lo applica dell'immagine fornita. Ci sono un paio di cose da notare:

(1) Non è una funzione
(2) La stessa immagine viene usato per creare la grafica oggetto, e come fonte del metodo 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

Non so se si tratta di cattiva pratica di non creare un altro bitmap per rendere l'immagine finale in, ma la cosa strana è il metodo funziona bene per un regolazione del bilanciamento del colore (Matrix30, 31 e 32), ma non fa nulla per un adeguamento opacità (Matrix33).

Che cosa sta succedendo?

È stato utile?

Soluzione

Se ho capito la tua domanda correttamente: ti stai chiedendo perché non è possibile modificare il canale alfa con questo metodo? (Perché dovrebbe essere una funzione invece di un sub me elludes completamente.)

Ma perché non funziona come ci si potrebbe aspettare con opactiy / trasparenza capisco perfettamente. : -)

Il metodo .DrawImage (combinata con le ImageAttributes) trarrà ciascun pixel alterata su se stesso (poiché la larghezza e l'altezza sono uguali). Si noti che sarà disegnare - non Sostituire . Ciò significa che il valore del pixel originale sarà si fondono con il valore di pixel di recente calcolato. Tra le altre cose, questo significa che se il pixel originale se completamente opaco, non c'è modo che che cambierà. Dipingere con un colore parzialmente transpararent per qualcosa di opaco sarà ancora yieald un colore opaco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top