我想操纵图块层的颜色。我找到了三种解决方案,都不够。
解决方案1:我使用的图像图层(ol.layer.Image
)使用可以操作颜色的栅格源(ol.source.Raster
)。请参阅OpenLayers的Color Manipulation示例。渲染图像后,放大和缩小是平滑的,因为图像的像素不会在每帧上被操纵;图像仅重新调整大小。缺点是,在缩小时,图像会变小,直到它不再填满画布。仅当缩放停止时才会完全重绘以填充画布。无法使用此解决方案,因为我的用户应始终查看所有可用的地图数据,即使在缩小时也是如此。 “缩小,等待,填充画布”循环过于分散注意力。
解决方案2:扩展解决方案1,我在图像层下面添加了一个图块层,以便在缩小时画布总是用地图数据填充。请参阅OpenLayers的Shaded Relief示例。缺点是在缩小时,图像层外部的区域显示非颜色操纵的图块层。无法使用此解决方案,因为我的用户必须不知道任何颜色校正。
解决方案3 :我使用切片图层并向侦听ol.Map
事件的postcompose
实例添加事件监听器。当这个事件触发时,我通过读取像素颜色直接操作画布上下文,更改它们并将它们写回上下文。这有效但速度非常慢,因为postcompose
会在每一帧上触发,我必须重新操纵所有画布的像素。
我的问题:
如何有效地操作切片图层的颜色,同时避免解决方案1的问题(缩小时背景变得可见)和解决方案2(第二层与第一层不匹配)?
OpenLayers是否支持颜色查找表?
可以设置颜色配置文件吗?
答案 0 :(得分:1)
在github上查看ol-ext,它们有一个颜色过滤器扩展,在示例中使用了一个tile层。就颜色配置文件而言,它们具有一些预定义的颜色,例如灰度和棕褐色。您可能已经完成了他们的代码并找到了自己的部分。
http://viglino.github.io/ol-ext/examples/filter/map.filter.colorize.html