Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

Changing image hue

Image Hue

  • Please log in to reply
4 replies to this topic

#1 Mikeman27294

Mikeman27294

    Insert Member Title Here

  • Active Members
  • PipPipPipPipPipPip
  • 469 posts

Posted 12 September 2011 - 01:01 PM

Hey everyone.

I want to add a theming engine to a program of mine, so that there is multiple hues, ie red, green, orange, blue and so on. I also want to be able to change the brightness of the background, ie you can choose between a range oflight greys through to dark greys.

I have searched the forum and came across this:

#include<Array.au3>
#include<Color.au3>
#include<GUIConstantsEx.au3>

AutoIt         
GUICreate("",360,350) $gra = GUICtrlCreateGraphic(0,0,360,20) GUISetState() $Color = 0xFFff00 GUISetBkColor($Color) ConsoleWrite("Color: 0x" & Hex($Color, 6) & @CRLF) ConsoleWrite("Saturation: " & _Color_GetSaturation($Color) & " %" & @CRLF) ConsoleWrite("Brightness: " & _Color_GetBrightness($Color) & " %" & @CRLF) ConsoleWrite("Hue: " & _Color_GetHue($Color) & " º" & @CRLF) Sleep(1000) ConsoleWrite("Complementary color: " & _Color_FindComplementary($Color) & @CRLF & @CRLF) $i = 0 While $i < 2     $i += 1     GUISetBkColor(_Color_FindComplementary($Color))     Sleep(500)     GUISetBkColor($Color)     Sleep(500) WEnd GUISetBkColor(0) For $x = 0 To 360 Step 2     $hue = _Color_SetHue($Color, $x)     ConsoleWrite("Hue: " & $x & " º" & $hue & @CRLF) ;~  GUISetBkColor($hue)     GUICtrlSetGraphic($gra,$GUI_GR_COLOR,$hue,$hue)     GUICtrlSetGraphic($gra,$GUI_GR_RECT,$x,0,2,20)     GUICtrlSetGraphic($gra,$GUI_GR_REFRESH)     Sleep(30)   Next Sleep(500) GUISetBkColor($Color) GUICtrlDelete($gra) $gra = GUICtrlCreateGraphic(0,0,350,20) $gra2 = GUICtrlCreateGraphic(0,20,350,20)     ConsoleWrite("  Saturation:  Brightness:" & @CRLF) For $x = 0 To 100     $sat = _Color_SetSaturation($Color, $x)     $brigth = _Color_SetBrightness($Color, $x)     ConsoleWrite($x & " % " & $sat & "   " & $brigth & @CRLF)     GUICtrlSetGraphic($gra,$GUI_GR_COLOR,$sat,$sat)     GUICtrlSetGraphic($gra2,$GUI_GR_COLOR,$brigth,$brigth)     GUICtrlSetGraphic($gra,$GUI_GR_RECT,350*$x/100,0,Ceiling (350/100),20)     GUICtrlSetGraphic($gra2,$GUI_GR_RECT,350*$x/100,0,Ceiling( 350/100),20)     GUICtrlSetGraphic($gra,$GUI_GR_REFRESH)     GUICtrlSetGraphic($gra2,$GUI_GR_REFRESH)     Sleep(30) Next   Func _Color_SetSaturation($iColor, $nPercent)     Local $aColorArray[4]     $nPercent = 1 - ($nPercent / 100)       $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)       If $aColorArray[1] = $aColorArray[2] And $aColorArray[2] = $aColorArray[3] Then Return -1       $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)     $IndexMid = 6 - ($IndexMax + $IndexMin)       $aColorArray[$IndexMid] = ($aColorArray[$IndexMax] * ($aColorArray[$IndexMid] - $aColorArray[$IndexMin])) / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])     $aColorArray[$IndexMid] = Round($aColorArray[$IndexMid] + ($aColorArray[$IndexMax] - $aColorArray[$IndexMid]) * $nPercent, 0)       $aColorArray[$IndexMin] = Round($aColorArray[$IndexMax] * $nPercent, 0)     Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2) EndFunc   ;==>_Color_SetSaturation   Func _Color_GetSaturation($iColor)     Local $aColorArray[4]       $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)       $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)     $IndexMid = 6 - ($IndexMax + $IndexMin)     Return Round((1 - $aColorArray[$IndexMin] / $aColorArray[$IndexMax]) * 100, 0) EndFunc   ;==>_Color_GetSaturation   Func _Color_SetBrightness($iColor, $nPercent)     Local $aColorArray[4]     $nPercent = $nPercent / 100       $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)       $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $ActBrightness = $aColorArray[$IndexMax] / 255     For $i = 1 To 3         $aColorArray[$i] = Round($aColorArray[$i] * $nPercent / $ActBrightness, 0)     Next     Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2) EndFunc   ;==>_Color_SetBrightness   Func _Color_GetBrightness($iColor)     Local $aColorArray[4]       $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)       $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     Return Round(($aColorArray[$IndexMax] / 255) * 100, 0) EndFunc   ;==>_Color_GetBrightness   Func _Color_SetHue($iColor, $iHue)     Local $aColorArray[4]       $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)       $iMax = _ArrayMax($aColorArray, 1, 1)     $iMin = _ArrayMin($aColorArray, 1, 1)       If $iHue >= 61 And $iHue <= 180 Then         $IndexMax = 2         If $iHue < 120 Then             $IndexMin = 3             $iMid = (($iMax - $iMin) * (120 - $iHue)) / 60 + $iMin         Else             $IndexMin = 1             $iMid = (($iMax - $iMin) * ($iHue - 120)) / 60 + $iMin         EndIf     ElseIf $iHue >= 181 And $iHue <= 299 Then         $IndexMax = 3         If $iHue <= 240 Then             $IndexMin = 1             $iMid = (($iMax - $iMin) * (240 - $iHue)) / 60 + $iMin         Else             $IndexMin = 2             $iMid = (($iMax - $iMin) * ($iHue - 240)) / 60 + $iMin         EndIf     ElseIf $iHue >= 300 Or $iHue <= 60 Then         $IndexMax = 1         If $iHue <= 60 Then             $IndexMin = 3             $iMid = (($iMax - $iMin) * ($iHue)) / 60 + $iMin         Else             $IndexMin = 2             $iMid = (($iMax - $iMin) * (360 - $iHue)) / 60 + $iMin         EndIf     EndIf     $IndexMid = 6 - ($IndexMin + $IndexMax)     $aColorArray[$IndexMin] = $iMin     $aColorArray[$IndexMax] = $iMax     $aColorArray[$IndexMid] = $iMid     Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2) EndFunc   ;==>_Color_SetHue   Func _Color_GetHue($iColor)     Local $aColorArray[4], $Hue       $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)       $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)     $IndexMid = 6 - ($IndexMax + $IndexMin)     $Lambda = ($aColorArray[$IndexMid] - $aColorArray[$IndexMin]) * 60 / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])       Switch $IndexMax         Case 1             Switch $IndexMin                 Case 2                     $Hue = 360 - $Lambda                 Case 3                     $Hue = $Lambda             EndSwitch         Case 2             Switch $IndexMin                 Case 1                     $Hue = 120 + $Lambda                 Case 3                     $Hue = 120 - $Lambda             EndSwitch         Case 3             Switch $IndexMin                 Case 1                     $Hue = 240 - $Lambda                 Case 2                     $Hue = 240 + $Lambda             EndSwitch     EndSwitch     Return Round($Hue, 0) EndFunc   ;==>_Color_GetHue   Func _Color_FindComplementary($iColor)     Local $iHue = Mod(_Color_GetHue($iColor) + 180, 360)     Return _Color_SetHue($iColor, $iHue) EndFunc   ;==>_Color_FindComplementary


However, I dont quite understand the hue changing function in this, or the brightness function. Are there any easier ways to do something like this? Otherwise, can someone please help me make sense of the hue and brightness functions?

Thanks.

Finally the autoit tags are working so there u go. Sorry bouth that, it was only showing the first few lines and then it swallowed up the edit button and all those buttons and so on.

Edited by Mikeman27294, 13 September 2011 - 08:29 AM.

Spoiler








#2 MvGulik

MvGulik

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 2,848 posts

Posted 12 September 2011 - 03:11 PM

Try passing the code, after first switching the post editor in code mode. An post it in that mode to(if posting in normal mode also screws things up.) ...
Erm: Yep ... Don't post in Normal mode ;)
Grr: ... don't even switch to normal mode ... :graduated:

test: (will be removed again) (guess not yet ... )
AutoIt         
#include<Array.au3> #include<Color.au3> #include<GUIConstantsEx.au3> GUICreate("", 360, 350) $gra = GUICtrlCreateGraphic(0, 0, 360, 20) GUISetState() $Color = 0xFFff00 GUISetBkColor($Color) ConsoleWrite("Color: 0x" & Hex($Color, 6) & @CRLF) ConsoleWrite("Saturation: " & _Color_GetSaturation($Color) & " %" & @CRLF) ConsoleWrite("Brightness: " & _Color_GetBrightness($Color) & " %" & @CRLF) ConsoleWrite("Hue: " & _Color_GetHue($Color) & " º" & @CRLF) Sleep(1000) ConsoleWrite("Complementary color: " & _Color_FindComplementary($Color) & @CRLF & @CRLF) $i = 0 While $i < 2     $i += 1     GUISetBkColor(_Color_FindComplementary($Color))     Sleep(500)     GUISetBkColor($Color)     Sleep(500) WEnd GUISetBkColor(0) For $x = 0 To 360 Step 2     $Hue = _Color_SetHue($Color, $x)     ConsoleWrite("Hue: " & $x & " º" & $Hue & @CRLF) ;~ GUISetBkColor($hue)     GUICtrlSetGraphic($gra, $GUI_GR_COLOR, $Hue, $Hue)     GUICtrlSetGraphic($gra, $GUI_GR_RECT, $x, 0, 2, 20)     GUICtrlSetGraphic($gra, $GUI_GR_REFRESH)     Sleep(30) Next Sleep(500) GUISetBkColor($Color) GUICtrlDelete($gra) $gra = GUICtrlCreateGraphic(0, 0, 350, 20) $gra2 = GUICtrlCreateGraphic(0, 20, 350, 20) ConsoleWrite("  Saturation: Brightness:" & @CRLF) For $x = 0 To 100     $sat = _Color_SetSaturation($Color, $x)     $brigth = _Color_SetBrightness($Color, $x)     ConsoleWrite($x & " % " & $sat & "   " & $brigth & @CRLF)     GUICtrlSetGraphic($gra, $GUI_GR_COLOR, $sat, $sat)     GUICtrlSetGraphic($gra2, $GUI_GR_COLOR, $brigth, $brigth)     GUICtrlSetGraphic($gra, $GUI_GR_RECT, 350 * $x / 100, 0, Ceiling(350 / 100), 20)     GUICtrlSetGraphic($gra2, $GUI_GR_RECT, 350 * $x / 100, 0, Ceiling(350 / 100), 20)     GUICtrlSetGraphic($gra, $GUI_GR_REFRESH)     GUICtrlSetGraphic($gra2, $GUI_GR_REFRESH)     Sleep(30) Next Func _Color_SetSaturation($iColor, $nPercent)     Local $aColorArray[4]     $nPercent = 1 - ($nPercent / 100)     $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)     If $aColorArray[1] = $aColorArray[2] And $aColorArray[2] = $aColorArray[3] Then Return -1     $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)     $IndexMid = 6 - ($IndexMax + $IndexMin)     $aColorArray[$IndexMid] = ($aColorArray[$IndexMax] * ($aColorArray[$IndexMid] - $aColorArray[$IndexMin])) / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])     $aColorArray[$IndexMid] = Round($aColorArray[$IndexMid] + ($aColorArray[$IndexMax] - $aColorArray[$IndexMid]) * $nPercent, 0)     $aColorArray[$IndexMin] = Round($aColorArray[$IndexMax] * $nPercent, 0)     Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2) EndFunc ;==>_Color_SetSaturation Func _Color_GetSaturation($iColor)     Local $aColorArray[4]     $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)     $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)     $IndexMid = 6 - ($IndexMax + $IndexMin)     Return Round((1 - $aColorArray[$IndexMin] / $aColorArray[$IndexMax]) * 100, 0) EndFunc ;==>_Color_GetSaturation Func _Color_SetBrightness($iColor, $nPercent)     Local $aColorArray[4]     $nPercent = $nPercent / 100     $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)     $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $ActBrightness = $aColorArray[$IndexMax] / 255     For $i = 1 To 3         $aColorArray[$i] = Round($aColorArray[$i] * $nPercent / $ActBrightness, 0)     Next     Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2) EndFunc ;==>_Color_SetBrightness Func _Color_GetBrightness($iColor)     Local $aColorArray[4]     $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)     $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     Return Round(($aColorArray[$IndexMax] / 255) * 100, 0) EndFunc ;==>_Color_GetBrightness Func _Color_SetHue($iColor, $iHue)     Local $aColorArray[4]     $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)     $iMax = _ArrayMax($aColorArray, 1, 1)     $iMin = _ArrayMin($aColorArray, 1, 1)     If $iHue >= 61 And $iHue <= 180 Then         $IndexMax = 2         If $iHue < 120 Then             $IndexMin = 3             $iMid = (($iMax - $iMin) * (120 - $iHue)) / 60 + $iMin         Else             $IndexMin = 1             $iMid = (($iMax - $iMin) * ($iHue - 120)) / 60 + $iMin         EndIf     ElseIf $iHue >= 181 And $iHue <= 299 Then         $IndexMax = 3         If $iHue <= 240 Then             $IndexMin = 1             $iMid = (($iMax - $iMin) * (240 - $iHue)) / 60 + $iMin         Else             $IndexMin = 2             $iMid = (($iMax - $iMin) * ($iHue - 240)) / 60 + $iMin         EndIf     ElseIf $iHue >= 300 Or $iHue <= 60 Then         $IndexMax = 1         If $iHue <= 60 Then             $IndexMin = 3             $iMid = (($iMax - $iMin) * ($iHue)) / 60 + $iMin         Else             $IndexMin = 2             $iMid = (($iMax - $iMin) * (360 - $iHue)) / 60 + $iMin         EndIf     EndIf     $IndexMid = 6 - ($IndexMin + $IndexMax)     $aColorArray[$IndexMin] = $iMin     $aColorArray[$IndexMax] = $iMax     $aColorArray[$IndexMid] = $iMid     Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2) EndFunc ;==>_Color_SetHue Func _Color_GetHue($iColor)     Local $aColorArray[4], $Hue     $aColorArray[1] = _ColorGetRed($iColor)     $aColorArray[2] = _ColorGetGreen($iColor)     $aColorArray[3] = _ColorGetBlue($iColor)     $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)     $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)     $IndexMid = 6 - ($IndexMax + $IndexMin)     $Lambda = ($aColorArray[$IndexMid] - $aColorArray[$IndexMin]) * 60 / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])     Switch $IndexMax         Case 1             Switch $IndexMin                 Case 2                     $Hue = 360 - $Lambda                 Case 3                     $Hue = $Lambda             EndSwitch         Case 2             Switch $IndexMin                 Case 1                     $Hue = 120 + $Lambda                 Case 3                     $Hue = 120 - $Lambda             EndSwitch         Case 3             Switch $IndexMin                 Case 1                     $Hue = 240 - $Lambda                 Case 2                     $Hue = 240 + $Lambda             EndSwitch     EndSwitch     Return Round($Hue, 0) EndFunc ;==>_Color_GetHue Func _Color_FindComplementary($iColor)     Local $iHue = Mod(_Color_GetHue($iColor) + 180, 360)     Return _Color_SetHue($iColor, $iHue) EndFunc ;==>_Color_FindComplementary


Last 'Done' (I Hope) edit ... yep. (all edit-code mode, no normal edit-mode involved.)

Edited by iEvKI3gv9Wrkd41u, 13 September 2011 - 08:12 PM.

"Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions."
 
"The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014)


#3 taietel

taietel

    I'm the third from the left...

  • Active Members
  • PipPipPipPipPipPip
  • 726 posts

Posted 12 September 2011 - 03:56 PM

Take a look here.

#4 UEZ

UEZ

    Never say never

  • MVPs
  • 5,081 posts

Posted 12 September 2011 - 03:56 PM

You can checkout TinyColorCatcher or Image Tool.

Br,
UEZ

 
The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯


#5 Mikeman27294

Mikeman27294

    Insert Member Title Here

  • Active Members
  • PipPipPipPipPipPip
  • 469 posts

Posted 13 September 2011 - 08:39 AM

Thanks guys. That image tool looks like it is exactly what will answer my question.
Spoiler






Also tagged with one or more of these keywords: Image, Hue

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users