From a151d1b7a5765588f99587c31a93f19e3d404574 Mon Sep 17 00:00:00 2001 From: Kamil Date: Sun, 5 Jul 2020 17:52:51 +0200 Subject: [PATCH] #11235 GetDataAtPixel performance improvement --- src/ol/renderer/canvas/Layer.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ol/renderer/canvas/Layer.js b/src/ol/renderer/canvas/Layer.js index e3e8f5c698..65b6a84e98 100644 --- a/src/ol/renderer/canvas/Layer.js +++ b/src/ol/renderer/canvas/Layer.js @@ -282,12 +282,15 @@ class CanvasLayerRenderer extends LayerRenderer { let data; try { - data = context.getImageData( - Math.round(renderPixel[0]), - Math.round(renderPixel[1]), - 1, - 1 - ).data; + const x = Math.round(renderPixel[0]); + const y = Math.round(renderPixel[1]); + const newCanvas = document.createElement('canvas'); + const newContext = newCanvas.getContext('2d'); + newCanvas.width = 1; + newCanvas.height = 1; + newContext.clearRect(0, 0, 1, 1); + newContext.drawImage(context.canvas, x, y, 1, 1, 0, 0, 1, 1); + data = newContext.getImageData(0, 0, 1, 1).data; } catch (err) { if (err.name === 'SecurityError') { // tainted canvas, we assume there is data at the given pixel (although there might not be)