【问题标题】:postMessage ArrayBuffer to native client module from JavaScript从 JavaScript 到本机客户端模块的 postMessage ArrayBuffer
【发布时间】:2014-02-05 06:44:43
【问题描述】:

我想将 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);
});

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

然而,NaCl 模块实际上将传递的数据作为pp::VarDictionary 键=原始数组的索引和值=原始数组的值 (由pp::Var::DebugString 确认)。

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

或者,有没有其他方法可以将图像传递给 NaCl 模块?

【问题讨论】:

    标签: javascript google-nativeclient


    【解决方案1】:

    在地球示例中将画布传递给 NaCl 模块以从 jpeg 加载纹理(请参阅 SDK 中的示例/演示/地球)。

    这是来自该示例的 sn-p:

    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);
    

    它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 2010-11-11
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      相关资源
      最近更新 更多