【问题标题】:Array buffer IE10 - Typed array constructor argument is invalid数组缓冲区 IE10 - 类型化数组构造函数参数无效
【发布时间】:2014-10-01 09:31:21
【问题描述】:

我正在使用 Javascript 画布来更改图像上的像素。在某些时候,我需要数组缓冲区来使用 jsfeat.js 库。

IE10 在这一行告诉我“类型化数组构造函数参数无效”:

var imageData = ctx.getImageData(0, 0, W, H);
var data_u32 = new Uint32Array(imagedata.data.buffer);

当我 console.log imagedata.data.buffer 时,它在 IE10 中给了我“未定义”。在 Chrome 中,我有“ArrayBuffer {}”。

如果我直接传递数据,效果不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 什么是imagedata?你是怎么设置的?
  • 只是一个简单的 ctx.getImageData。我编辑了我的问题

标签: javascript arrays internet-explorer canvas


【解决方案1】:

IE10 的 .getImageData 使用 CanvasPixelArray 而不是较新的 Uint32Array。

(IE10可以使用Uint32Array,但在canvas中没有实现)

CanvasPixelArray.data 没有 .buffer 属性——这是您的错误警告的原因。

“手动”将 imageData 加载到 data_u32 中的示例代码。

var imageData = ctx.getImageData(0, 0, W, H);

// init the array by size
var data_u32 = new Uint32Array(W*H*4);

// fill the array "manually"
var data=imageData.data;
for(var i=0;i<data.length;i++){
    data_u32[n]=data[n];
}

【讨论】:

  • 感谢您的回答,我会在我的项目中尝试一下。如果可行,我会及时通知您!
  • 它不适合我。首先数组的长度必须是W*H,因为var data_u32 = new Uint32Array(imageData.data.buffer);data_u32.length 等于imageData.data.length/4等于W*H。然后在您的代码中,您指的是未设置的n。有了这个受人尊敬的我仍然没有得到我所期望的结果。 (我正在使用 jsfeats 的精明边缘检测器)
猜你喜欢
  • 2019-03-28
  • 2016-10-14
  • 1970-01-01
  • 2016-04-20
  • 2014-10-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
相关资源
最近更新 更多