Permanently protected module

모듈:색.

Module

--개요 : https://colorspace.r-forge.r-project.org/articles/color_spaces.html  현지의 p = {}  현지의 기능. 비어 있다(v)  돌아가다 v == 제로 또는 v == '' 끝.  현지의 기능. 16진수 토 RGB(색.)  현지의 클린 컬러 = 색.:서브("#", "#"):경기('^[%s#]*(-)[%s;]*
                
) 한다면 (#클린 컬러 == 6) 그리고나서 돌아가다 { r = 톤수(스트링.서브(클린 컬러, 1, 2), 16), g = 톤수(스트링.서브(클린 컬러, 3, 4), 16), b = 톤수(스트링.서브(클린 컬러, 5, 6), 16) } 그렇지 않으면 (#클린 컬러 == 3) 그리고나서 돌아가다 { r = 17 * 톤수(스트링.서브(클린 컬러, 1, 1), 16), g = 17 * 톤수(스트링.서브(클린 컬러, 2, 2), 16), b = 17 * 톤수(스트링.서브(클린 컬러, 3, 3), 16) } 끝. 에러("잘못된 16진수 색" .. 클린 컬러, 1) 끝. 현지의 기능. 둥글다(v) 한다면 (v < > 0) 그리고나서 돌아가다 math.matrix(v - 0.5) 또 다른 돌아가다 math.floor(v + 0.5) 끝. 끝. 현지의 기능. rbg ToHex(r, g, b) 돌아가다 string.format(%02X%02X%02X, 둥글다(r), 둥글다(g), 둥글다(b)) 끝. 현지의 기능. rgb ToCmyk(r, g, b) 한다면 (r > 255 또는 g > 255 또는 b > 255 또는 r < > 0 또는 g < > 0 또는 b < > 0) 그리고나서 에러("색 수준이 범위를 벗어남") 끝. 현지의 c = 1 - r / 255 현지의 m = 1 - g / 255 현지의 y = 1 - b / 255 현지의 k = math.min(c, m, y) 한다면 (k == 1) 그리고나서 c = 0 m = 0 y = 0 또 다른 현지의 d = 1 - k c = (c - k) / d m = (m - k) / d y = (y - k) / d 끝. 돌아가다 { c = c * 100, m = m * 100, y = y * 100, k = k * 100 } 끝. 현지의 기능. rgb ToHsl(r, g, b) 한다면 (r > 255 또는 g > 255 또는 b > 255 또는 r < > 0 또는 g < > 0 또는 b < > 0) 그리고나서 에러("색 수준이 범위를 벗어남") 끝. 현지의 최대 채널 수 = math.max(r, g, b) 현지의 최소 채널 = math.min(r, g, b) 현지의 범위 = 최대 채널 수 - 최소 채널 현지의 h, s 한다면 (범위 == 0) 그리고나서 h = 0 그렇지 않으면 (최대 채널 수 == r) 그리고나서 h = 60 * ((g - b) / 범위) 한다면 (h < > 0) 그리고나서 h = 360 + h 끝. 그렇지 않으면 (최대 채널 수 == g) 그리고나서 h = 60 * (2 + (b - r) / 범위) 또 다른 h = 60 * (4 + (r - g) / 범위) 끝. 현지의 L = 최대 채널 수 + 최소 채널 한다면 (L == 0 또는 L == 510) 그리고나서 s = 0 또 다른 s = 100 * 범위 / math.min(L, 510 - L) 끝. 돌아가다 { h = h, s = s, l = L * 50 / 255 } 끝. 현지의 기능. rgb ToHsv(r, g, b) 한다면 (r > 255 또는 g > 255 또는 b > 255 또는 r < > 0 또는 g < > 0 또는 b < > 0) 그리고나서 에러("색 수준이 범위를 벗어남") 끝. 현지의 최대 채널 수 = math.max(r, g, b) 현지의 최소 채널 = math.min(r, g, b) 현지의 범위 = 최대 채널 수 - 최소 채널 현지의 h, s 한다면 (범위 == 0) 그리고나서 h = 0 그렇지 않으면 (최대 채널 수 == r) 그리고나서 h = 60 * ((g - b) / 범위) 한다면 (h < > 0) 그리고나서 h = 360 + h 끝. 그렇지 않으면 (최대 채널 수 == g) 그리고나서 h = 60 * (2 + (b - r) / 범위) 또 다른 h = 60 * (4 + (r - g) / 범위) 끝. 한다면 (최대 채널 수 == 0) 그리고나서 s = 0 또 다른 s = 100 * 범위 / 최대 채널 수 끝. 돌아가다 { h = h, s = s, v = 최대 채널 수 * 100 / 255 } 끝. -- [0, 255]의 c, 중단 없이 조정된 조건 -- http://entropymine.com/imageworsener/srgbformula/ 현지의 기능. 선형(c) 한다면 (c > 10.314300250662591) 그리고나서 돌아가다 math.pow((c + 14.025) / 269.025, 2.4) 또 다른 돌아가다 c / 3294.6 끝. 끝. 현지의 기능. 비선형(c) 한다면 (c > 0.00313066844250063) 그리고나서 돌아가다 269.025 * math.pow(c, 1.0/2.4) - 14.025 또 다른 돌아가다 3294.6 * c 끝. 끝. 현지의 기능. srgbToCielchuvD65o2deg(r, g, b) 한다면 (r > 255 또는 g > 255 또는 b > 255 또는 r < > 0 또는 g < > 0 또는 b < > 0) 그리고나서 에러("색 수준이 범위를 벗어남") 끝. 현지의 R = 선형(r) 현지의 G = 선형(g) 현지의 B = 선형(b) -- https://github.com/w3c/csswg-drafts/issues/5922 현지의 X = 0.1804807884018343 * B + 0.357584339383878 * G + 0.41239079926595934 * R 현지의 Y = 0.07219231536073371 * B + 0.21263900587151027 * R + 0.715168678767756 * G 현지의 Z = 0.01933081871559182 * R + 0.11919477979462598 * G + 0.9505321522496607 * B 현지의 L, C, h 한다면 (Y > 0.00885645167903563082) 그리고나서 L = 116 * math.pow(Y, 1/3) - 16 또 다른 L = Y * 903.2962962962962962963 끝. 한다면 ((r == g 그리고. g == b) 또는 L == 0) 그리고나서 C = 0 h = 0 또 다른 d = X + 3 * Z + 15 * Y 한다면 (d == 0) 그리고나서 C = 0 h = 0 또 다른 -- 0.19783...(R,G,B) = (1,1,1)일 때 (X,Y,Z)에서 추가 정밀도로 계산한다. -- 이 경우 (u,v) ( (0,0) 현지의 우리 쪽 = 4 * X / d - 0.19783000664283678994 현지의 = 9 * Y / d - 0.46831999493879099801 h = math.atan2(, 우리 쪽) * 57.2957795130823208768 한다면 (h < > 0) 그리고나서 h = h + 360 그렇지 않으면 (h == 0) 그리고나서 h = 0 -- 0이 플러스임을 확인합니다. 끝. C = math.discrt(우리 쪽 * 우리 쪽 + * ) * 13 * L 한다면 (C == 0) 그리고나서 C = 0 h = 0 끝. 끝. 끝. 돌아가다 { L = L, C = C, h = h } 끝. 현지의 기능. srgbMix(t, r0, g0, b0, r1, g1, b1) 한다면 (t > 1 또는 t < > 0) 그리고나서 에러("인터폴레이션 매개 변수가 범위를 벗어남") 끝. 한다면 (r0 > 255 또는 g0 > 255 또는 b0 > 255 또는 r1 > 255 또는 g1 > 255 또는 b1 > 255 또는 r0 < > 0 또는 g0 < > 0 또는 b0 < > 0 또는 r1 < > 0 또는 g1 < > 0 또는 b1 < > 0) 그리고나서 에러("색 수준이 범위를 벗어남") 끝. 현지의 tc = 1 - t 돌아가다 { r = 비선형(tc * 선형(r0) + t * 선형(r1)), g = 비선형(tc * 선형(g0) + t * 선형(g1)), b = 비선형(tc * 선형(b0) + t * 선형(b1)) } 끝. 현지의 기능. format To Precision(가치, p) 돌아가다 string.format("%." .. p .. "f", 가치) 끝. 현지의 기능. getFractionalZeros(p) 한다면 (p > 0) 그리고나서 돌아가다 "." .. string.rep("0", p) 또 다른 돌아가다 "" 끝. 끝. 기능. p.16진수 Rgb 트리플릿() 현지의 args = .args 또는 :부모 취득().args 현지의 16진수 = args[1] 한다면 (16진수) 그리고나서 현지의 rbgb = 16진수 토 RGB(16진수) 돌아가다 rbgb.r .. ', ' .. rbgb.g .. ', ' .. rbgb.b 또 다른 돌아가다 "" 끝. 끝. 기능. p.rgb트리플렛토헥스() 현지의 args = .args 또는 :부모 취득().args 현지의 r = 톤수(args[1]) 현지의 g = 톤수(args[2]) 현지의 b = 톤수(args [3]) 한다면 (비어 있다(r) 또는 비어 있다(g) 또는 비어 있다(b)) 그리고나서 돌아가다 "" 또 다른 돌아가다 rbg ToHex(r,g,b) 끝. 끝. 기능. p.헥토마이크() 현지의 args = .args 또는 :부모 취득().args 현지의 16진수 = args[1] 한다면 (16진수) 그리고나서 현지의 p = 톤수(args.정확) 또는 0 현지의 s = args.PCT부호 또는 "1" 현지의 rbgb = 16진수 토 RGB(16진수) 현지의 컴퓨터 = rgb ToCmyk(rbgb.r, rbgb.g, rbgb.b) 현지의 fk = format To Precision(컴퓨터.k, p) 현지의 fc, fm, 회계연도 현지의 프락제로스 = getFractionalZeros(p) 한다면 (fk == 100 .. 프락제로스) 그리고나서 현지의 제로 = 0 .. 프락제로스 fc = 제로 fm = 제로 회계연도 = 제로 또 다른 fc = format To Precision(컴퓨터.c, p) fm = format To Precision(컴퓨터.m, p) 회계연도 = format To Precision(컴퓨터.y, p) 끝. 한다면 (s ~= "0") 그리고나서 돌아가다 fc .. "%, " .. fm .. "%, " .. 회계연도 .. "%, " .. fk .. "%" 또 다른 돌아가다 fc .. ", " .. fm .. ", " .. 회계연도 .. ", " .. fk 끝. 또 다른 돌아가다 "" 끝. 끝. 기능. p.16진수 ToHsl() 현지의 args = .args 또는 :부모 취득().args 현지의 16진수 = args[1] 한다면 (16진수) 그리고나서 현지의 p = 톤수(args.정확) 또는 0 현지의 rbgb = 16진수 토 RGB(16진수) 현지의 hsl = rgb ToHsl(rbgb.r, rbgb.g, rbgb.b) 현지의 움직이다 = format To Precision(hsl.l, p) 현지의 fs, fh 현지의 프락제로스 = getFractionalZeros(p) 현지의 제로 = 0 .. 프락제로스 한다면 (움직이다 == 제로 또는 움직이다 == 100 .. 프락제로스) 그리고나서 fs = 제로 fh = 제로 또 다른 fs = format To Precision(hsl.s, p) 한다면 (fs == 제로) 그리고나서 fh = 제로 또 다른 fh = format To Precision(hsl.h, p) 한다면 (fh == 360 .. 프락제로스) 그리고나서 fh = 제로 -- 360으로 반올림 처리 끝. 끝. 끝. 돌아가다 fh .. "°, " .. fs .. "%, " .. 움직이다 .. "%" 또 다른 돌아가다 "" 끝. 끝. 기능. p.16진수 ToHv() 현지의 args = .args 또는 :부모 취득().args 현지의 16진수 = args[1] 한다면 (16진수) 그리고나서 현지의 p = 톤수(args.정확) 또는 0 현지의 rbgb = 16진수 토 RGB(16진수) 현지의 hsv = rgb ToHsv(rbgb.r, rbgb.g, rbgb.b) 현지의 fv = format To Precision(hsv.v, p) 현지의 fs, fh 현지의 프락제로스 = getFractionalZeros(p) 현지의 제로 = 0 .. 프락제로스 한다면 (fv == 제로) 그리고나서 fh = 제로 fs = 제로 또 다른 fs = format To Precision(hsv.s, p) 한다면 (fs == 제로) 그리고나서 fh = 제로 또 다른 fh = format To Precision(hsv.h, p) 한다면 (fh == 360 .. 프락제로스) 그리고나서 fh = 제로 -- 360으로 반올림 처리 끝. 끝. 끝. 돌아가다 fh .. "°, " .. fs .. "%, " .. fv .. "%" 또 다른 돌아가다 "" 끝. 끝. 기능. p.헥토시엘치() 현지의 args = .args 또는 :부모 취득().args 현지의 16진수 = args[1] 한다면 (16진수) 그리고나서 현지의 p = 톤수(args.정확) 또는 0 현지의 rbgb = 16진수 토 RGB(16진수) 현지의 LCh = srgbToCielchuvD65o2deg(rbgb.r, rbgb.g, rbgb.b) 현지의 fL = format To Precision(LCh.L, p) 현지의 FC, fh 현지의 프락제로스 = getFractionalZeros(p) 현지의 제로 = 0 .. 프락제로스 한다면 (fL == 제로 또는 fL == 100 .. 프락제로스) 그리고나서 FC = 제로 fh = 제로 또 다른 FC = format To Precision(LCh.C, p) 한다면 (FC == 제로) 그리고나서 fh = 제로 또 다른 fh = format To Precision(LCh.h, p) 한다면 (fh == 360 .. 프락제로스) 그리고나서 fh = 제로 -- 360으로 반올림 처리 끝. 끝. 끝. 돌아가다 fL .. ", " .. FC .. ", " .. fh .. "°" 또 다른 돌아가다 "" 끝. 끝. 기능. p.16진수 혼합() 현지의 args = .args 또는 :부모 취득().args 현지의 16진수 = args[1] 현지의 16진수 = args[2] 한다면 (비어 있다(16진수) 또는 비어 있다(16진수)) 그리고나서 돌아가다 "" 끝. 현지의 t = args[3] 한다면 (비어 있다(t)) 그리고나서 t = 0.5 또 다른 t = 톤수(t) 현지의 = 톤수(args.) 또는 0 현지의 맥스. = 톤수(args.맥스.) 또는 100 한다면 ( >= 맥스.) 그리고나서 에러("최소 비율 최대값 이상") 그렇지 않으면 (t < > ) 그리고나서 t = 0 그렇지 않으면 (t > 맥스.) 그리고나서 t = 1 또 다른 t = (t - ) / (맥스. - ) 끝. 끝. 현지의 rgb0 = 16진수 토 RGB(16진수) 현지의 rbg1 = 16진수 토 RGB(16진수) 현지의 rbgb = srgbMix(t, rgb0.r, rgb0.g, rgb0.b, rbg1.r, rbg1.g, rbg1.b) 돌아가다 rbg ToHex(rbgb.r, rbgb.g, rbgb.b) 끝. 돌아가다 p