80 lines
1.7 KiB
Python
80 lines
1.7 KiB
Python
import wx
|
|
import math
|
|
|
|
#Brightens a color (wx.Colour), factor = [0,1]
|
|
|
|
def BrightenColor(color, factor):
|
|
|
|
r,g,b = color
|
|
a = color.Alpha()
|
|
|
|
factor = min(max(factor, 0), 1)
|
|
|
|
r+=(255-r)*factor
|
|
b+=(255-b)*factor
|
|
g+=(255-g)*factor
|
|
|
|
return wx.Colour(r,g,b,a)
|
|
|
|
#Darkens a color (wx.Colour), factor = [0, 1]
|
|
|
|
def DarkenColor(color, factor):
|
|
bkR ,bkG , bkB = color
|
|
|
|
alpha = color.Alpha()
|
|
|
|
factor = min(max(factor, 0), 1)
|
|
factor = 1 - factor
|
|
|
|
r = float(bkR * factor)
|
|
g = float(bkG * factor)
|
|
b = float(bkB * factor)
|
|
|
|
r = min(max(r,0),255)
|
|
b = min(max(b,0),255)
|
|
g = min(max(g,0),255)
|
|
|
|
return wx.Colour(r, g, b, alpha)
|
|
|
|
|
|
#Calculates the brightness of a color, different options
|
|
|
|
def GetBrightnessO1(color):
|
|
r,g,b = color
|
|
return (0.299*r + 0.587*g + 0.114*b)
|
|
|
|
def GetBrightnessO2(color):
|
|
r,g,b = color
|
|
return math.sqrt( 0.241 * r * r + 0.691 * g * g + 0.068 * b * b )
|
|
|
|
|
|
|
|
#Calculates a suitable color based on original color (wx.Colour), its brightness, a factor=[0,1] (darken/brighten by factor depending on calculated brightness)
|
|
|
|
def GetSuitableColor(color, factor):
|
|
|
|
brightness = GetBrightnessO1(color)
|
|
|
|
if brightness >129:
|
|
return DarkenColor(color, factor)
|
|
else:
|
|
return BrightenColor(color, factor)
|
|
|
|
|
|
|
|
#Calculates the color between a given start and end colors, delta = [0,1]
|
|
#Colors are wx.Colour objects
|
|
|
|
def CalculateTransitionColor(startColor, endColor, delta):
|
|
sR,sG,sB = startColor
|
|
eR,eG,eB = endColor
|
|
|
|
alphaS = startColor.Alpha()
|
|
alphaE = endColor.Alpha()
|
|
|
|
tR = sR + (eR - sR) * delta
|
|
tG = sG + (eG - sG) * delta
|
|
tB = sB + (eB - sB) * delta
|
|
|
|
return wx.Colour(tR, tG, tB, (alphaS + alphaE)/2)
|