下面的方法采用颜色矩阵并将其应用于提供的图像。有几点需要注意:
(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)。
发生了什么事?
答案 0 :(得分:3)
如果我理解你的问题:你问为什么你不能用这种方法改变alpha通道? (为什么它应该是一个函数而不是一个子函数完全脱离了我。)
但是为什么它不能像你所期望的那样以不透明/透明度完全理解。 : - )
.DrawImage方法(与ImageAttributes结合使用)会将每个更改的像素绘制到自身上(因为宽度和高度相同)。请注意,它将绘制 - 而不是替换。这意味着原始像素值将混合与新计算的像素值。除此之外,这意味着如果原始像素完全不透明,则无法改变。在不透明的东西上涂上部分透明的颜色仍然会产生不透明的颜色。