下面的方法採用一個顏色矩陣並將其應用於提供的圖像。有幾件事要注意:(1)它不是一個函數
(2)同一個圖像用於創建圖形對象,並作爲DrawImage方法的源代碼。將.Net中的圖像應用於ColorMatrix時的奇怪行爲,WinForms
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)沒有任何作用。
發生了什麼事?
@nobugz:請您詳細說明一下 - 我正在做一個應用程序,我有生產 - 而我沒有發現任何問題。你是否說我未來會遇到一個令人討厭的驚喜? – 2010-03-18 09:32:49
我已經看到,當你畫一個位圖到它自己時,它是錯誤的。我忘記了確切的細節,但應該足以添加幾行代碼。 – 2010-03-18 12:11:04
@nobugz:感謝您的警告。如果您嘗試同時重新調整比例,可能會出現問題嗎?然後我可以很容易想象奇怪的事情發生。 [在使用大型位圖(數百Mb)時,如果可以省略這些額外的代碼行,這很好,因爲內存不足異常容易發生,因爲位圖要求所有內存都是連續的...] – 2010-03-18 15:42:58