Javascript InternetExplorer中的图像数据集

Javascript InternetExplorer中的图像数据集,javascript,html,html5-canvas,arraybuffer,putimagedata,Javascript,Html,Html5 Canvas,Arraybuffer,Putimagedata,我有一个arraybuffer,名为MEM,比画布的宽度*高度大。我想把arrayBuffer数据绘制到画布上 imgData.data.set(…)应该可以工作,因为imgData.data是一个UInt8数组,它具有.set方法。它在FireFox和Chrome中都能工作,但在IE中我遇到了一个错误:对象不支持这个属性或方法:“set” 初始化: var MEM = new ArrayBuffer(2*1024*1024); var canvas, ctx, imgData; var in

我有一个arraybuffer,名为
MEM
,比画布的宽度*高度大。我想把arrayBuffer数据绘制到画布上

imgData.data.set(…)
应该可以工作,因为imgData.data是一个UInt8数组,它具有.set方法。它在FireFox和Chrome中都能工作,但在IE中我遇到了一个错误:
对象不支持这个属性或方法:“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);
};

有了这段代码,它就可以工作了

if(window.CanvasPixelArray) {
    CanvasPixelArray.prototype.set = function(arr) {
        var l=this.length, i=0;

        for(;i<l;i++) {
            this[i] = arr[i];
        }
    };
}
if(window.CanvasPixelArray){
CanvasPixelArray.prototype.set=函数(arr){
var l=此长度,i=0;

对于(;I您使用哪个版本的IE?根据和,
ImageData.data
应该返回一个,而不是
Unit8Array
;即使它是
Unit8Array
,它也会返回一个。根据,
ImageData.data
返回一个,它只具有
length
属性。所以我猜您在IE上运气不好。也许您可以找到它使用
ctx.createImageData(w,h)
对其进行nd?