下面的方法获取一个颜色矩阵并将其应用于提供的图像。有几件事需要注意:
(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)却没有任何效果。
发生什么事?