javascript / gwt:将Uint8Array或ArrayBuffer转换为ImageData元素

时间:2012-11-23 10:21:27

标签: javascript html5 gwt

我想获取一个ArrayBuffer或Uint8Array元素并将它们转换为ImageData元素,最终转换为Canvas元素。

有可能吗?

2 个答案:

答案 0 :(得分:4)

在纯粹的javascript中会出现类似的情况:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");    
var imgData = ctx.createImageData(100,100);

var buffer = new ArrayBuffer(4*100*100);
var ubuf = new Uint8Array(buffer);
for (var i=0;i < ubuf.length; i+=4) {
    imgData.data[i]   = ubuf[i];   //red
    imgData.data[i+1] = ubuf[i+1]; //green
    imgData.data[i+2] = ubuf[i+2]; //blue
    imgData.data[i+3] = ubuf[i+3]; //alpha
}

ctx.putImageData(imgData,0,0);

要在GWT中执行此操作,您需要将其包装在JSNI method

答案 1 :(得分:1)

2021 年答案

setter 构造函数现在在大多数浏览器中支持可选的 ImageData 参数,因此无需像 rzymek 在 2013 年建议的那样复制 Uint8ClampedArray 循环中的值。

所以基于他的例子:

for()

适用于除 Internet Explorer 和 Android Webview 之外的所有现代浏览器。

https://developer.mozilla.org/en-US/docs/Web/API/ImageData/ImageData