javascript - 从 JavaScript postMessage ArrayBuffer 到 native 客户端模块

标签 javascript google-nativeclient

我想将 HTML Canvas 的图像发送到 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);
});

imageData.data 在 JavaScript 控制台上属于 Uint8ClampedArray 类型。 所以我认为 NaCl 模块将传递的数据视为 pp::VarArrayBuffer

但是,NaCl 模块实际上将传递的数据作为 pp::VarDictionary 其中 key = 原始数组的索引,value = 原始数组的值 (由 pp::Var::DebugString 确认)。

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

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

最佳答案

在 Earth 示例中将 Canvas 传递给 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});

所以看来您只需将代码更改为:

NaClModule.postMessage(imageData.data.buffer);

它应该可以工作。

关于javascript - 从 JavaScript postMessage ArrayBuffer 到 native 客户端模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570352/

相关文章:

javascript - 是否可以在 Blazor 中将导出的 JavaScript 模块类导入为互操作类?

javascript - 如何在javascript中遍历和比较数组元素内的对象

javascript - 如何使不透明度逐渐缩放

javascript - 动态设置 Javascript 原型(prototype)

编译本地客户端的 hello_world.c

c++ - pp::Core::GetTimeTicks() 在系统 sleep 时与 pp::InputEvent::GetTimeStamp() 不同步

javascript - jQuery - 如何根据变量值 .show() 和 .hide() 元素?

c++ - 我可以将 RetroArch 移植到 Native Client 吗

javascript - Web 浏览器中的 Ruby

google-chrome - Linux : Compile process could not be created 上的 PNaCl 和 Google Chrome 40