mano lineas juego graficos figuras examples dibujar dedo con alzada html5-canvas openlayers-3

html5 canvas - lineas - OpenLayers 3-contexto de lienzo de mosaico



graficos con canvas html5 (1)

Estoy intentando reproducir este ejemplo en OL3 (3.6.0) usando el siguiente código. Tengo problemas para obtener el contexto de la imagen para hacer getImageData () y putImageData () en el evento OSM tileloadend . Cualquier guía será muy apreciada.

function map_create (div_id, lat, lng, zoom, hide_controls) { vectorSource=new ol.source.Vector(); vectorLayer=new ol.layer.Vector({source: vectorSource}); osm=new ol.source.OSM(); osm.on("tileloadend", function(evt){ /*var size=evt.tile.getTileCoord(); console.log(size);*/ var c = evt.tile.getImage(); console.log(c.context); // undefined return; var ctx=c.getContext("2d"); if (ctx) { console.log(ctx); /* var imgd = ctx.getImageData(0, 0, 100,100); var pix = imgd.data; for (var i = 0, n = pix.length; i < n; i += 4) { pix[i] = pix[i + 1] = pix[i + 2] = (3 * pix[i] + 4 * pix[i + 1] + pix[i + 2]) / 8; } ctx.putImageData(imgd, 0, 0); evt.tile.imgDiv.removeAttribute("crossorigin"); evt.tile.imgDiv.src = ctx.canvas.toDataURL();*/ } }); var map=new ol.Map({ target: div_id, layers: [ new ol.layer.Tile({source: osm}), vectorLayer ], renderer:''canvas'', view: new ol.View({ center: ol.proj.transform([lng, lat], ''EPSG:4326'', ''EPSG:3857''), zoom: zoom }) }); return map;


En OL3, tienes que cargar una variable de mosaico con la fuente correspondiente.

Luego puede usar postcompose para crear un evento cuando se carga y aplicar la función de escala de grises para crear un lienzo.

function Initialize() { var imagery = new ol.layer.Tile({ source: new ol.source.OSM() }); var map = new ol.Map({ target: ''map'', layers: [imagery], view: new ol.View({ center: ol.proj.transform([-2.1833, 41.3833], ''EPSG:4326'', ''EPSG:3857''), zoom: 6 }) }); //Apply a filter on "postcompose" events. imagery.on(''postcompose'', function(event) { greyscale(event.context); }); }

Puede encontrar el ejemplo aquí , donde el lienzo no está sobre la capa original, pero puede cambiar los divs para su propósito.