Убрать холст сглаживания для перепроектированного статического слоя изображения - PullRequest
0 голосов
/ 08 ноября 2019

Слой статического изображения, который требует перепроецирования, не позволяет отключить сглаживание изображения.

Вот слой, который я использую:

var layer = new ol.layer.Image({
    source: new ol.source.ImageStatic({
        url: "grid.png",
        imageExtent: [-130, 20, -55, 50],
        projection: 'EPSG:4326'
    })
});

При увеличении края пикселяразмытые (с псевдонимами), и они должны быть четкими.

Следующее неэффективно, потому что ловушка prerender приходит после работы проекции внутри ol / reproj.js, где создается холст:

layer.on('prerender', function(evt) {
      evt.context.imageSmoothingEnabled = false;
});

Тем временем я пользуюсь хаком:

diff --git a/src/ol/reproj.js b/src/ol/reproj.js
index 7593c6b..5e0d090 100644
--- a/src/ol/reproj.js
+++ b/src/ol/reproj.js
@@ -103,6 +103,11 @@ export function render(width, height, pixelRatio,

   context.scale(pixelRatio, pixelRatio);

+  context.imageSmoothingEnabled = false;
+  context.webkitImageSmoothingEnabled = false;
+  context.mozImageSmoothingEnabled = false;
+  context.msImageSmoothingEnabled = false;
+
   const sourceDataExtent = createEmpty();
   sources.forEach(function(src, i, arr) {
     extend(sourceDataExtent, src.extent);

Я что-то пропустил? Есть ли способ сделать это без восстановления openlayers?

1 Ответ

0 голосов
/ 08 ноября 2019

На основе Как я могу переопределить встроенную функцию JS (canvas getContext ()) в чистом JavaScript?

Вы можете отключить сглаживание для все 2d контексты холста

// store a reference to original vector
HTMLCanvasElement.prototype.__oldGetContext = HTMLCanvasElement.prototype.getContext;

// patch
HTMLCanvasElement.prototype.getContext = function(type, options) {
  var context = this.__oldGetContext(type, options);   // call original vector
  if (type === "2d") {
    context.imageSmoothingEnabled = false;
    context.webkitImageSmoothingEnabled = false;
    context.mozImageSmoothingEnabled = false;
    context.msImageSmoothingEnabled = false;
  }
  return context;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...