我有一个ArrayBuffer,名为
MEM
,比画布的宽度*高度还要大。我想把arrayBuffer数据绘制到画布上。
imgData.data.set(...)
应该可以工作,因为imgData.data是Uint8Array,具有.set方法。在FireFox和Chrome中可以使用,但在IE中会出现错误:Object doesn't support this property or method: 'set'
初始化:var MEM = new ArrayBuffer(2*1024*1024);
var canvas, ctx, imgData;
var init = function() {
canvas = document.getElementById('canvas');
ctx = canvas.getContext('2d');
imgData=ctx.createImageData(canvas.width, canvas.height);
repaint();
};
重绘函数:
var repaint = function() {
// .... //
imgData.data.set(new Uint8Array(MEM, 0, canvas.width*canvas.height*4));
ctx.putImageData(imgData, 0, 0);
requestAnimationFrame(repaint);
};
ImageData.data
应该返回一个Uint8ClampedArray
,而不是一个Unit8Array
;即使它是一个Unit8Array
,它也需要IE>=10标准模式才能使用set
方法。 - PasserbyImageData.data
返回一个"CanvasPixelArray
"对象,该对象只有一个length
属性。所以我猜你在IE上运行不了。 - Passerbyctx.createImageData(w, h)
来绕过这个问题? - user1693593