simpler SetSat
This commit is contained in:
parent
fcf072ff5a
commit
9633f29a6b
1 changed files with 3 additions and 35 deletions
|
@ -312,41 +312,9 @@ proc Sat(C: Color): float32 {.inline.} =
|
||||||
max([C.r, C.g, C.b]) - min([C.r, C.g, C.b])
|
max([C.r, C.g, C.b]) - min([C.r, C.g, C.b])
|
||||||
|
|
||||||
proc SetSat(C: Color, s: float32): Color {.inline.} =
|
proc SetSat(C: Color, s: float32): Color {.inline.} =
|
||||||
var arr = [(C.r, 0), (C.g, 1), (C.b, 2)]
|
let satC = Sat(C)
|
||||||
# TODO: Don't rely on sort.
|
if satC > 0:
|
||||||
arr.sort()
|
result = (C - min([C.r, C.g, C.b])) * s / satC
|
||||||
var
|
|
||||||
Cmin = arr[0][0]
|
|
||||||
Cmid = arr[1][0]
|
|
||||||
Cmax = arr[2][0]
|
|
||||||
if Cmax > Cmin:
|
|
||||||
Cmid = (((Cmid - Cmin) * s) / (Cmax - Cmin))
|
|
||||||
Cmax = s
|
|
||||||
else:
|
|
||||||
Cmid = 0
|
|
||||||
Cmax = 0
|
|
||||||
Cmin = 0
|
|
||||||
|
|
||||||
if arr[0][1] == 0:
|
|
||||||
result.r = Cmin
|
|
||||||
if arr[1][1] == 0:
|
|
||||||
result.r = Cmid
|
|
||||||
if arr[2][1] == 0:
|
|
||||||
result.r = Cmax
|
|
||||||
|
|
||||||
if arr[0][1] == 1:
|
|
||||||
result.g = Cmin
|
|
||||||
if arr[1][1] == 1:
|
|
||||||
result.g = Cmid
|
|
||||||
if arr[2][1] == 1:
|
|
||||||
result.g = Cmax
|
|
||||||
|
|
||||||
if arr[0][1] == 2:
|
|
||||||
result.b = Cmin
|
|
||||||
if arr[1][1] == 2:
|
|
||||||
result.b = Cmid
|
|
||||||
if arr[2][1] == 2:
|
|
||||||
result.b = Cmax
|
|
||||||
|
|
||||||
proc alphaFix(Cb, Cs, mixed: Color): Color {.inline.} =
|
proc alphaFix(Cb, Cs, mixed: Color): Color {.inline.} =
|
||||||
let ab = Cb.a
|
let ab = Cb.a
|
||||||
|
|
Loading…
Reference in a new issue