1 | let t
|
2 | let e
|
3 | const n=()=>e=e||(()=>t=t||document.createElement("canvas"))().getContext("2d")
|
4 | const o="little"===(()=>{try{const t=new ArrayBuffer(2)
|
5 | const e=new Uint8Array(t)
|
6 | const n=new Uint16Array(t)
|
7 | e[0]=161
|
8 | e[1]=178
|
9 | if(45729===n[0])return"little"
|
10 | if(41394===n[0])return"big"}catch(t){console.error("[getEndianness]",t)}return"unknown"})()?(t,e,n,o)=>(t<<0)+(e<<8)+(n<<16)+(o<<24):(t,e,n,o)=>(t<<24)+(e<<16)+(n<<8)+(o<<0)
|
11 | const r=t=>t.length>1?t:`0${t}`
|
12 | const c=(t,e,n)=>{const o=t-.5*n
|
13 | const r=t+.5*n
|
14 | const c=e-.5*n
|
15 | const s=e+.5*n
|
16 | return(t,e)=>t===o&&e>=c&&e<=s||t===r&&e>=c&&e<=s||e===c&&t>=o&&t<=r||e===s&&t>=o&&t<=r}
|
17 | const s=o(0,0,0,0)
|
18 | const a=o(244,244,244,150)
|
19 | const i=o(32,32,32,255)
|
20 | const d=o(255,255,255,255)
|
21 | const l=({canvas:t,ZOOM:e,GRID_COUNT:o})=>c=>{const s=t.getBoundingClientRect()
|
22 | const a=(c.clientX-s.left)/s.width*t.width,i=(c.clientY-s.top)/s.height*t.height
|
23 | const d=Math.round(a-o/2)
|
24 | const l=Math.round(i-o/2)
|
25 | const g=t.getContext("2d").getImageData(d,l,o,o)
|
26 | return{colorHex:((t,e,n)=>{const o=4*(e+n*t.width)
|
27 | const c=t.data
|
28 | const s=c[o].toString(16)
|
29 | const a=c[o+1].toString(16)
|
30 | const i=c[o+2].toString(16)
|
31 | return`#${r(s)}${r(a)}${r(i)}`.toUpperCase()})(g,o>>1,o>>1),scaledImageData:((t,e,o=e)=>{const r=t
|
32 | const c=r.width
|
33 | const s=new Uint32Array(r.data.buffer)
|
34 | const a=n().getImageData(0,0,c*e,r.height*o)
|
35 | const i=a.width
|
36 | const d=new Uint32Array(a.data.buffer)
|
37 | const l=i*a.height
|
38 | for(let t=0;t<l;t++){const n=t%i
|
39 | const r=Math.floor(t/i)
|
40 | const a=Math.floor(n/e)+Math.floor(r/o)*c
|
41 | d[t]=s[a]}return a})(g,e,e)}}
|
42 | const g=({sourceCanvas:t,pickerCanvasContext:e,pickerDiv:n,colorPre:o,ZOOM:r,GRID_COUNT:g})=>new Promise(u=>{const h=(({ZOOM:t,GRID_COUNT:e})=>{const n=e*t
|
43 | const o=c(n>>1,n>>1,t)
|
44 | const r=c(n>>1,n>>1,t+2)
|
45 | const l=document.createElement("canvas")
|
46 | l.width=l.height=n
|
47 | const g=l.getContext("2d").getImageData(0,0,n,n)
|
48 | const u=new Uint32Array(g.data.buffer)
|
49 | for(let e=0,c=n*n;e<c;e++){const c=e%n
|
50 | const l=Math.floor(e/n)
|
51 | u[e]=c%t==0||l%t==0?a:s
|
52 | o(c,l)&&(u[e]=i)
|
53 | r(c,l)&&(u[e]=d)}l.getContext("2d").putImageData(g,0,0)
|
54 | return l})({ZOOM:r,GRID_COUNT:g})
|
55 | const m=l({canvas:t,ZOOM:r,GRID_COUNT:g})
|
56 | let w=null
|
57 | const O=t=>{w||window.requestAnimationFrame(()=>{(t=>{const{colorHex:r,scaledImageData:c}=m(t)
|
58 | e.putImageData(c,0,0)
|
59 | e.drawImage(h,0,0)
|
60 | const s=n.getBoundingClientRect()
|
61 | n.style.visibility="visible"
|
62 | n.style.transform=`translate3d(${Math.round(t.clientX-s.width/2)}px, ${Math.round(t.clientY-s.height/2)}px, 0)`
|
63 | o.innerHTML=r
|
64 | C=r})(w)
|
65 | w=null})
|
66 | w=t}
|
67 | let C
|
68 | t.addEventListener("mousemove",O)
|
69 | t.addEventListener("click",()=>{t.removeEventListener("mousemove",O)
|
70 | u(C)})
|
71 | document.addEventListener("keypress",t=>{"Escape"===t.code&&u("")})})
|
72 | window.PICK_COLOR=(async({IMAGE_DATA_URL:t,ZOOM:e=10,GRID_COUNT:n=17})=>{if(!Number.isInteger(e))throw new Error(`[LOAD_SCREENSHOT] invalid integer ZOOM: ${e}`)
|
73 | if(!Number.isInteger(n)||n%2!=1)throw new Error(`[LOAD_SCREENSHOT] invalid odd integer GRID_COUNT: ${n}`)
|
74 | const o=document.getElementById("canvas-source")
|
75 | const r=await(({imageDataUrl:t})=>new Promise((e,n)=>{const o=document.createElement("img")
|
76 | o.onerror=n
|
77 | o.onload=(()=>e(o))
|
78 | o.src=t}))({imageDataUrl:t})
|
79 | o.width=r.width
|
80 | o.height=r.height
|
81 | o.getContext("2d").drawImage(r,0,0)
|
82 | const c=document.getElementById("div-picker")
|
83 | const s=document.getElementById("pre-color")
|
84 | const a=document.getElementById("canvas-picker")
|
85 | const i=a.getContext("2d")
|
86 | a.width=a.height=e*n
|
87 | const d=await g({sourceCanvas:o,pickerCanvasContext:i,pickerDiv:c,colorPre:s,ZOOM:e,GRID_COUNT:n})
|
88 | return d})
|