我试图完成一个目标,即获取特定WebGL Web软件ArcGIS Scene Viewer的图像副本。它使用了一个画布(canvas),我尝试过以下方法:
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。所有我能做的就是在 canvas 加载地图后执行一些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/ 它总是返回整个黑色图像。
HTMLCanvasElement.prototype.getContext
以强制使用preserveDrawingBuffer: true
。https://jsfiddle.net/w8cjdyr1/ - Mike