colorin
Version:
colors Interpolation
5 lines (4 loc) • 1.75 kB
JavaScript
/*!
* colorin v0.7.0
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).colorin=t.colorin||{})}(this,(function(t){"use strict";let e;const i={width:100,height:10};let a=!1;try{const t=new OffscreenCanvas(1,1);t.getContext("2d").fillText("hello",0,0),a=!0}catch(t){a=!1}function n(){if(!e){const{width:t,height:n}=i;a?e=new OffscreenCanvas(t,n):(e=document.createElement("canvas"),e.width=t,e.height=n)}return e}t.registerCanvas=function(t){t&&(e=t)},t.ColorIn=class{constructor(t,e={}){if(!Array.isArray(t))return void console.error("colors is not array");if(t.length<2)return void console.error("colors.length should >1");this.colors=t;let a=1/0,n=-1/0;for(let e=0,i=t.length;e<i;e++){const i=t[e][0];a=Math.min(i,a),n=Math.max(i,n)}this.min=a,this.max=n,this.valueOffset=this.max-this.min,this.options=Object.assign({},i,e),this._initImgData()}getImageData(){return this.imgData}_initImgData(){const t=n(),{width:e,height:i}=this.options;t.width=e,t.height=i;const a=t.getContext("2d",{willReadFrequently:!0});a.clearRect(0,0,t.width,t.height);const o=a.createLinearGradient(0,0,t.width,0),{colors:s,valueOffset:h}=this;for(let t=0,e=s.length;t<e;t++){const[e,i]=s[t],a=(e-this.min)/h;o.addColorStop(a,i)}a.fillStyle=o,a.fillRect(0,0,t.width,t.height),this.imgData=a.getImageData(0,0,t.width,t.height)}getColor(t){t=Math.max(this.min,t);const e=((t=Math.min(t,this.max))-this.min)/this.valueOffset;let i=Math.round(e*this.imgData.width);i=Math.min(i,this.imgData.width-1);const a=4*i;return[this.imgData.data[a],this.imgData.data[a+1],this.imgData.data[a+2],this.imgData.data[a+3]]}},Object.defineProperty(t,"__esModule",{value:!0})}));