Issue #11: move color utility to separate module.

This commit is contained in:
Sergey Vartanov 2020-09-20 23:58:10 +03:00
parent aee36d0703
commit 557e0d1992
4 changed files with 42 additions and 40 deletions

View file

@ -1,8 +1,3 @@
from typing import Any, List
from colour import Color
class MinMax:
"""
Minimum and maximum.
@ -29,36 +24,3 @@ class MinMax:
Get middle point between minimum and maximum.
"""
return (self.min_ + self.max_) / 2
def is_bright(color: Color) -> bool:
"""
Is color bright enough to have black outline instead of white.
"""
return (
0.2126 * color.red * 256 +
0.7152 * color.green * 256 +
0.0722 * color.blue * 256 > 200)
def get_gradient_color(value: Any, bounds: MinMax, colors: List[Color]):
"""
Get color from the color scale for the value.
:param value: given value (should be in bounds)
:param bounds: maximum and minimum values
:param colors: color scale
"""
color_length: int = len(colors) - 1
scale = colors + [Color("black")]
coefficient: float = (
0 if bounds.max_ == bounds.min_ else
(value - bounds.min_) / (bounds.max_ - bounds.min_))
coefficient = min(1.0, max(0.0, coefficient))
m: int = int(coefficient * color_length)
color_coefficient = (coefficient - m / color_length) * color_length
return Color(rgb=[
scale[m].rgb[i] + color_coefficient *
(scale[m + 1].rgb[i] - scale[m].rgb[i]) for i in range(3)])