K = {
let context, canvas, scale = width / N;
if (this && this.getContext) {
canvas = this;
context = canvas.getContext("2d");
context.clearRect(0, 0, N * scale, HN * scale);
} else {
context = DOM.context2d(N * scale, HN * scale, 1);
canvas = context.canvas;
canvas.style.background = "#333";
canvas.style.width = `${scale * N}px`;
canvas.style.height = `${scale * HN}px`;
}
let path = d3.geoPath(d3.geoIdentity().scale(scale)).context(context);
let l = imageData.data.length / 4,
a = new Uint8Array(l);
for (let i = 0; i < l; i+=1)
a[i] = 1/3 * (imageData.data[i*4 + 0] + imageData.data[i*4 + 1] + imageData.data[i*4 + 2])
contours(a).forEach(c => {
context.beginPath(),
path(c),
context.fillStyle = d3.interpolateRdYlBu(c.value/256),
context.fill(),
context.strokeStyle = 'white',
context.stroke();
});
return canvas;
}