postMessage ArrayBuffer来自JavaScript的本机客户端模块

ysk*_*kin 0 javascript google-nativeclient

我想将HTML画布的图像发送到Google Chrome上的NaCl模块.在"dom方面",我有以下代码:

var NaClModule = .... // NaCl module denoted by <embed> tag
var canvas = .... // canvas element
canvas.addEventListener('click', function() {
    var imageData = this.getContext('2d').getImageData(0, 0, this.width, this.height);
    NaClModule.postMessage(imageData.data);
});
Run Code Online (Sandbox Code Playgroud)

imageData.dataUint8ClampedArrayJavaScript控制台上的类型.所以我认为NaCl模块看到传递数据为pp::VarArrayBuffer

但是,NaCl模块实际上采用了传递数据,如pp::VarDictionary key =原始数组的索引和值=原始数组的值(确认pp::Var::DebugString).

这是预期的行为吗?如果没有,我的代码是什么?

或者,还有其他方法将图像传递给NaCl模块吗?

小智 5

将画布传递到NaCl模块在地球示例中完成,以从jpeg加载纹理(请参阅SDK中的examples/demo/earth).

以下是该示例的摘录:

var imageData = context.getImageData(0, 0, img.width, img.height);
// Send NaCl module the raw image data obtained from canvas.
common.naclModule.postMessage({'message' : 'texture',
                               'name' : name,
                               'width' : img.width,
                               'height' : img.height,
                               'data' : imageData.data.buffer});
Run Code Online (Sandbox Code Playgroud)

所以看起来你只需要将代码更改为:

NaClModule.postMessage(imageData.data.buffer);
Run Code Online (Sandbox Code Playgroud)

它应该工作.