下面的方法,需要一个色彩矩阵并将其应用到所提供的图像。有几件事情需要注意:

(1)它不是一个功能,点击 (2)相同的图像被用来创建对象的图形,并作为方法的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

我不知道这是否是不好的做法不是为了创造另一个位图来呈现最终图像之中,但奇怪的是该方法的色彩平衡调整(Matrix30,31和32)正常工作,但并没有为不透明度调整(Matrix33)。

这是怎么回事?

有帮助吗?

解决方案

如果的我正确地理解你的问题:你会问,为什么你不能改变这种方法的alpha通道? (为什么它应该是一个函数而不是子完全elludes我。)

但为什么它不工作,你可以用opactiy /透明我完全理解期望。 : - )

在.DrawImage方法(与ImageAttributes组合)将每个像素的改变绘制到本身(因为宽度和高度是相同的)。请注意,它会的的 - 不是的替换的。这意味着原始像素值将混合与新计算出的像素值。别的不说,这意味着如果原始像素,如果完全不透明的,没有办法,这将发生改变。具有部分transpararent颜色某件事不透明仍将yieald不透明颜色画。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top