Я изменяю значения цвета каждого пикселя в изображении на основе расчета.Проблема в том, что это занимает более 5 секунд на моей машине с изображением 1000x1333, и я ищу способ оптимизировать его, чтобы он был намного быстрее.
Я думаю, что ColorMatrix
может быть вариантом, но яМне трудно понять, как я получу набор значений RGB пикселей, использую его для вычисления и затем устанавливаю новое значение пикселей.Я вижу, как это можно сделать, если я просто изменял (умножая, вычитая и т. Д.) Исходное значение с помощью ColorMatrix, но теперь я могу использовать возвращаемое значение в пикселях, чтобы использовать его для вычисления и нового значения.
Например:
Sub DarkenPicture()
Dim clrTestFolderPath = "C:\Users\Me\Desktop\ColorTest\"
Dim originalPicture = "original.jpg"
Dim Luminance As Single
Dim bitmapOriginal As Bitmap = Image.FromFile(clrTestFolderPath + originalPicture)
Dim Clr As Color
Dim newR As Byte
Dim newG As Byte
Dim newB As Byte
For x = 0 To bitmapOriginal.Width - 1
For y = 0 To bitmapOriginal.Height - 1
Clr = bitmapOriginal.GetPixel(x, y)
Luminance = ((0.21 * (Clr.R) + (0.72 * (Clr.G)) + (0.07 * (Clr.B))/ 255
newR = Clr.R * Luminance
newG = Clr.G * Luminance
newB = Clr.B * Luminance
bitmapOriginal.SetPixel(x, y, Color.FromArgb(newR, newG, newB))
Next
Next
bitmapOriginal.Save(clrTestFolderPath + "colorized.jpg", ImageFormat.Jpeg)
End Sub
Значение Luminance
является расчетным.Я знаю, что могу установить ColorMatrix
M00, M11, M22 на 0, 0, 0 соответственно и затем добавить новое значение в M40, M41, M42, но это новое значение вычисляется на основе умножения значения и сложения этого значения.компоненты пикселя (((0.21 * (Clr.R) + (0.72 * (Clr.G)) + (0.07 * (Clr.B))
, а результат - Luminance
- умножается на компонент цвета).
Возможно ли это даже с ColorMatrix
?