【发布时间】:2016-10-26 23:51:44
【问题描述】:
我正在尝试完成获取某个 WebGL Web 软件的图像副本的目标:ArcGIS Scene Viewer。它正在使用画布,我试过这个:
var canvas = document.getElementsByTagName("canvas")[0];
var resultDOM = document.getElementById("result");
resultDOM.innerText = canvas;
var gl = canvas.getContext("webgl", {preserveDrawingBuffer: true});
var pixels = new Uint8Array(gl.drawingBufferWidth * gl.drawingBufferHeight * 4);
gl.readPixels(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
console.log(pixels); // Uint8Array
但是在控制台登录的数组总是充满 [0, 0, 0, 255]。
所以我不能完全控制我用来创建画布的 JSAPI,所以我不能在第一次初始化 canvas 时设置 preserveDrawingBuffer: true,我所能做的就是在画布加载地图之后执行一些JS。那么我怎样才能得到我需要的图像呢?
我在这里做错了吗?我也尝试了帧缓冲区,它也不起作用:
canvas.addEventListener('click', function(ev) {
var gl = canvas.getContext("webgl", {
preserveDrawingBuffer: true
});
var framebuffer = gl.createFramebuffer();
//insert code to get mouse x,y position on canvas
var top = canvas.offsetTop;
var left = canvas.offsetLeft;
var x = ev.clientX - left;
var y = ev.clientY - top;
var pixels = new Uint8Array(4);
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
console.log(x, y, pixels);
});
返回的像素值也是[0, 0, 0, 0]。
您可以尝试以下示例:https://jsfiddle.net/qvtt87ky/ 它总是返回一个全黑的图像。
【问题讨论】:
-
如果 WebGL 上下文是由您无法控制的第三方库创建的,您可以更新
HTMLCanvasElement.prototype.getContext以强制preserveDrawingBuffer: truejsfiddle.net/w8cjdyr1
标签: javascript canvas webgl arcgis-js-api