OpenLayers 3:在不改变其他层的情况下将一层置于灰度

OpenLayers 3 : put one layer in grayscale without changing other layers

关于使用 Open Layers 3 将图层置于灰度的可能性,我有一个棘手的问题。

我已经实现了使用 canvas 元素的可能性将整个地图置于灰度中,就像在以下讨论中提出的示例中看到的那样:

但我的需求与这些示例略有不同:我想让用户可以在不改变其他图层颜色的情况下,以灰度方式逐层放置图层。例如,这个想法是让一个背景层为灰度,其他数据为彩色。

有人知道如何实现这样的事情吗?

谢谢

ol.source.Raster is what you are looking for. Here is an example.

  var raster = new ol.source.Raster({
    sources: [new ol.source.Stamen({
      layer: 'watercolor'
    })],
    operation: function(pixels, data) {
      // convert pixels to grayscale
      return pixels;
    }
  });

这使您能够在每层基础上操作任意源的像素数据。