我想将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
传递
with key =原始数组的索引和值=原始数组的值
(由pp::Var::DebugString
确认。)
这是预期的行为吗? 如果没有,我的代码是什么?
或者,还有其他方法可以将图像传递给NaCl模块吗?
答案 0 :(得分: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});
所以看起来你只需要将代码更改为:
NaClModule.postMessage(imageData.data.buffer);
它应该有用。