Frage

Die folgenden Verfahren findet eine Farbmatrix und wendet sie auf die zugeführten Bild. Es gibt ein paar Dinge zu beachten:

(1) Es ist nicht eine Funktion
(2) Das gleiche Bild verwendet wird, um das Grafik-Objekt zu erzeugen, und als Quelle der DrawImage Methode.

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

Ich weiß nicht, ob es die schlechte Praxis nicht eine andere Bitmap zu erstellen das fertige Bild in machen, aber das Merkwürdige ist die Methode funktioniert gut für einen Farbabgleich (Matrix30, 31 und 32), aber tut nichts für eine Opazität Einstellung (Matrix33).

Was ist los?

War es hilfreich?

Lösung

Wenn Ich verstehe Ihre Frage richtig: Sie fragen, warum Sie nicht den Alpha-Kanal mit dieser Methode ändern können? (Warum sollte es eine Funktion statt eines Unter elludes mich vollständig sein.)

Aber warum es nicht funktioniert, wie Sie mit opactiy erwarten kann / Transparenz verstehe ich vollkommen. : -)

Die .DrawImage Verfahren (mit den Imageattributes kombiniert) wird jedes geänderten Pixel auf sich selbst DRAW (da die Breite und Höhe gleich sind). Beachten Sie, dass es ziehen - nicht ersetzen . Dies bedeutet, dass der ursprüngliche Pixelwert wird Mischung mit dem neu berechneten Pixelwert. Unter anderem, dass dies bedeutet, wenn das ursprüngliche Pixel, wenn völlig undurchsichtig, gibt es keine Möglichkeit, dass das wird sich ändern. Malerei mit einer teilweise transpararent Farbe über etwas undurchsichtig wird noch eine undurchsichtige Farbe yieald.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top