Foxtable(狐表)用户栏目专家坐堂 → 如何写调整图片色相、饱和度色代码?


  共有3334人关注过本帖树形打印复制链接

主题:如何写调整图片色相、饱和度色代码?

帅哥哟,离线,有人找我吗?
lyfxybc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1290 积分:9820 威望:0 精华:0 注册:2012/9/19 21:13:00
如何写调整图片色相、饱和度色代码?  发帖心情 Post By:2015/3/22 22:13:00 [只看该作者]

如何写调整图片色相、饱和度色代码?像调整亮度那样

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/22 22:39:00 [只看该作者]

 在网上抄来一段,调整红色。

 

Dim img As image = getimage("d:\test.jpg")
Dim _saturation As Integer = 50 '0-100
Dim _lightness As Integer = 50 '0-100
Dim _hue As Integer = 50 '0-360

 

 

Const c1o60 As Double = 1 / 60
Const c1o255 As Double = 1 / 255
Dim result As Bitmap = New Bitmap(img)
result.SetResolution(img.HorizontalResolution, img.VerticalResolution)
Dim bmpData As BitmapData = result.LockBits( _
New Rectangle(0, 0, result.Width, result.Height), _
ImageLockMode.ReadWrite, img.PixelFormat)
Dim pixelBytes As Integer = _
System.Drawing.Image.GetPixelFormatSize(img.PixelFormat) \ 8
'Get the address of the first line.
Dim ptr As IntPtr = bmpData.Scan0
Dim size As Integer = bmpData.Stride * result.Height
Dim pixels(size - 1) As Byte
Dim index As Integer
Dim R, G, B As Double
Dim H, S, L, H1 As Double
Dim min, max, dif, sum As Double
Dim f1, f2 As Double
Dim v1, v2, v3 As Double
Dim sat As Double = 127 * _saturation / 100
Dim lum As Double = 127 * _lightness / 100
'Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size)
'Main loop.
For Row As Integer = 0 To result.Height - 1
    For Col As Integer = 0 To result.Width - 1
        index = (Row * bmpData.Stride) + (Col * pixelBytes)
        R = pixels(index + 2)
        G = pixels(index + 1)
        B = pixels(index + 0)
        'Conversion to HSL space.
        min = R
        If (G < min) Then min = G
        If (B < min) Then min = B
        max = R : f1 = 0.0 : f2 = G - B
        If (G > max) Then
            max = G : f1 = 120.0 : f2 = B - R
        End If
        If (B > max) Then
            max = B : f1 = 240.0 : f2 = R - G
        End If
        dif = max - min
        sum = max + min
        L = 0.5 * sum
        If (dif = 0) Then
            H = 0.0 : S = 0.0
        Else
            If (L < 127.5) Then
                S = 255.0 * dif / sum
            Else
                S = 255.0 * dif / (510.0 - sum)
            End If
            H = (f1 + 60.0 * f2 / dif)
            If H < 0.0 Then H += 360.0
            If H >= 360.0 Then H -= 360.0
        End If
        'Apply transformation.
        H = H + _hue
        If H >= 360.0 Then H = H - 360.0
        S = S + sat
        If S < 0.0 Then S = 0.0
        If S > 255.0 Then S = 255.0
        L = L + lum
        If L < 0.0 Then L = 0.0
        If L > 255.0 Then L = 255.0
        'Conversion back to RGB space.
        If (S = 0) Then
            R = L : G = L : B = L
        Else
            If (L < 127.5) Then
                v2 = c1o255 * L * (255 + S)
            Else
                v2 = L + S - c1o255 * S * L
            End If
            v1 = 2 * L - v2
            v3 = v2 - v1
            H1 = H + 120.0
            If (H1 >= 360.0) Then H1 -= 360.0
            If (H1 < 60.0) Then
                R = v1 + v3 * H1 * c1o60
            ElseIf (H1 < 180.0) Then
                R = v2
            ElseIf (H1 < 240.0) Then
                R = v1 + v3 * (4 - H1 * c1o60)
            Else
                R = v1
            End If
            H1 = H
            If (H1 < 60.0) Then
                G = v1 + v3 * H1 * c1o60
            ElseIf (H1 < 180.0) Then
                G = v2
            ElseIf (H1 < 240.0) Then
                G = v1 + v3 * (4 - H1 * c1o60)
            Else
                G = v1
            End If
            H1 = H - 120.0
            If (H1 < 0.0) Then H1 += 360.0
            If (H1 < 60.0) Then
                B = v1 + v3 * H1 * c1o60
            ElseIf (H1 < 180.0) Then
                B = v2
            ElseIf (H1 < 240.0) Then
                B = v1 + v3 * (4 - H1 * c1o60)
            Else
                B = v1
            End If
        End If
        'Save new values.
        pixels(index + 2) = CByte(R)
        pixels(index + 1) = CByte(G)
        pixels(index + 0) = CByte(B)
    Next
Next
'Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(pixels, 0, ptr, size)
'Unlock the bits.
result.UnlockBits(bmpData)

result.Save("d:\test7.jpg")


 回到顶部
帅哥哟,离线,有人找我吗?
lyfxybc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1290 积分:9820 威望:0 精华:0 注册:2012/9/19 21:13:00
  发帖心情 Post By:2015/3/23 11:39:00 [只看该作者]

谢谢

 回到顶部