我想操纵瓷砖层的颜色。我找到了三个解决方案,都不够。
解决方案1: I使用一个图像层(ol.layer.Image),它使用光栅源(ol.source.Raster),其颜色可以被操纵。请参阅OpenLayers的色彩操纵示例。一旦图像呈现,缩放和缩放是平滑的,因为图像的像素不是在每个帧上被操纵;图像只是调整大小。缺点是,当缩放时,图像会变小,直到它不再填充画布。只有当缩放停止时,它才会完全重新绘制以填充画布。此解决方案无法使用,因为我的用户应该始终查看所有可用的地图数据,即使在缩放时也是如此。“放大,等待,填充画布”循环太分散注意力了。
解决方案2:扩展解决方案1,我在图像层下面添加了一个平铺层,以便画布在缩放时总是填充地图数据。请参阅OpenLayers的阴影浮雕示例。缺点是,在缩放时,图像层外部的区域显示非彩色操作的瓷砖层。此解决方案不能使用,因为我的用户必须不知道任何颜色校正。
解决方案3: --我使用一个平铺层,并将一个事件侦听器添加到我的ol.Map实例中,侦听postcompose事件。当此事件触发时,我直接通过读取像素颜色、更改它们并将它们写回上下文来操作画布上下文。这是可行的,但非常缓慢,因为postcompose在每一帧上都会触发,我必须重新操作画布的所有像素。
我的问题:
发布于 2018-05-09 20:51:39
查看github上的ol-ext,它们有一个颜色过滤器扩展,在示例中使用了一个瓷砖层。至于颜色轮廓,他们有一些预定义的,如灰阶和紫色。您可能会完成他们的代码,并找到适合您自己的部分。
http://viglino.github.io/ol-ext/examples/filter/map.filter.colorize.html
https://stackoverflow.com/questions/50249377
复制相似问题