Browse Source

moved rgb/hsl helpers inside the color class

pull/99/head
Eugenio Parodi 3 years ago
parent
commit
813470aa7d
  1. 56
      TermTk/TTkCore/color.py
  2. 60
      TermTk/TTkWidgets/image.py

56
TermTk/TTkCore/color.py

@ -104,6 +104,62 @@ class _TTkColor:
( TTkK.Background if self._bg else TTkK.NONE ) | \
( TTkK.Modifier if self._mod else TTkK.NONE )
@staticmethod
def rgb2hsl(rgb):
r = rgb[0]/255
g = rgb[1]/255
b = rgb[2]/255
cmax = max(r,g,b)
cmin = min(r,g,b)
lum = (cmax-cmin)/2
if cmax == cmin:
return 0,0,lum
delta = cmax-cmin
if cmax == r:
hue = ((g-b)/delta)%6
elif cmax == g:
hue = (b-r)/delta+2
else:
hue = (r-g)/delta+4
sat = delta / (1 - abs(delta-1))
hue = int(hue*60) + ( 360 if hue < 0 else 0 )
sat = int(sat*100)
lum = int(lum*100)
return hue,sat,lum
@staticmethod
def hsl2rgb(hsl):
hue = hsl[0]
sat = hsl[1] / 100
lum = hsl[2] / 100
c = (1-abs(2*lum-1))*sat
x = c*(1-abs((hue/60)%2-1))
m = lum-c/2
if 0 <= hue < 60:
r,g,b = c,x,0
elif 60 <= hue < 120:
r,g,b = x,c,0
elif 120 <= hue < 180:
r,g,b = 0,c,x
elif 180 <= hue < 240:
r,g,b = 0,x,c
elif 240 <= hue < 300:
r,g,b = x,0,c
elif 300 <= hue < 360:
r,g,b = c,0,x
r = int((r + m) * 255)
g = int((g + m) * 255)
b = int((b + m) * 255)
return r,g,b
def getHex(self, ctype):
if ctype == TTkK.Foreground:
r,g,b = self.fgToRGB()

60
TermTk/TTkWidgets/image.py

@ -100,72 +100,16 @@ class TTkImage(TTkWidget):
# Use Blue as splitter
return splitReduce(2)
@staticmethod
def _rgb2hsl(rgb):
r = rgb[0]/255
g = rgb[1]/255
b = rgb[2]/255
cmax = max(r,g,b)
cmin = min(r,g,b)
lum = (cmax-cmin)/2
if cmax == cmin:
return 0,0,lum
delta = cmax-cmin
if cmax == r:
hue = ((g-b)/delta)%6
elif cmax == g:
hue = (b-r)/delta+2
else:
hue = (r-g)/delta+4
sat = delta / (1 - abs(delta-1))
hue = int(hue*60) + ( 360 if hue < 0 else 0 )
sat = int(sat*100)
lum = int(lum*100)
return hue,sat,lum
@staticmethod
def _hsl2rgb(hsl):
hue = hsl[0]
sat = hsl[1] / 100
lum = hsl[2] / 100
c = (1-abs(2*lum-1))*sat
x = c*(1-abs((hue/60)%2-1))
m = lum-c/2
if 0 <= hue < 60:
r,g,b = c,x,0
elif 60 <= hue < 120:
r,g,b = x,c,0
elif 120 <= hue < 180:
r,g,b = 0,c,x
elif 180 <= hue < 240:
r,g,b = 0,x,c
elif 240 <= hue < 300:
r,g,b = x,0,c
elif 300 <= hue < 360:
r,g,b = c,0,x
r = int((r + m) * 255)
g = int((g + m) * 255)
b = int((b + m) * 255)
return r,g,b
def rotHue(self, deg):
old = self._data
self._data = [[p for p in l ] for l in old]
for row in self._data:
for i,pixel in enumerate(row):
h,s,l = self._rgb2hsl(pixel)
h,s,l = TTkColor.rgb2hsl(pixel)
h += deg
#TTkLog.debug(f"{h=}")
if h >= 360: h-=360
row[i] = self._hsl2rgb((h,s,l))
row[i] = TTkColor.hsl2rgb((h,s,l))
def paintEvent(self):
img = self._data

Loading…
Cancel
Save