UNPKG

pixelbutler

Version:

Low-res bitmap render engine for big screens

91 lines (90 loc) 2.17 kB
'use strict'; var RGBA = require('./RGBA'); var HSV = require('./HSV'); function useAlpha(col) { return (typeof col.a === 'number' && col.a < 255); } exports.useAlpha = useAlpha; function hsv2rgb(hsv) { var r, g, b; var i; var f, p, q, t; var h = hsv.h; var s = hsv.s; var v = hsv.v; h = Math.max(0, Math.min(360, h)); s = Math.max(0, Math.min(100, s)); v = Math.max(0, Math.min(100, v)); s /= 100; v /= 100; if (s === 0) { r = g = b = v; return new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)); } h /= 60; i = Math.floor(h); f = h - i; p = v * (1 - s); q = v * (1 - s * f); t = v * (1 - s * (1 - f)); switch (i) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; default: r = v; g = p; b = q; } return new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)); } exports.hsv2rgb = hsv2rgb; function rgb2hsv(rgb) { var rr, gg, bb, r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255, h, s, v = Math.max(r, g, b), diff = v - Math.min(r, g, b), diffc = function (c) { return (v - c) / 6 / diff + 1 / 2; }; if (diff === 0) { h = s = 0; } else { s = diff / v; rr = diffc(r); gg = diffc(g); bb = diffc(b); if (r === v) { h = bb - gg; } else if (g === v) { h = (1 / 3) + rr - bb; } else if (b === v) { h = (2 / 3) + gg - rr; } if (h < 0) { h += 1; } else if (h > 1) { h -= 1; } } return new HSV(Math.round(h * 360), Math.round(s * 100), Math.round(v * 100)); } exports.rgb2hsv = rgb2hsv;