2014-02-05 2 views
0

Я хотел бы отправить изображение HTML-холста в модуль NaCl в Google Chrome. На "йот стороне", я следующий код:postMessage ArrayBuffer для собственного клиентского модуля из JavaScript

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 имеет тип Uint8ClampedArray на консоли JavaScript. Поэтому я предположил, что модуль NaCl см прошли данные в pp::VarArrayBuffer

Однако модуль NaCl фактически берут передаваемые данные как pp::VarDictionary с индексом ключ = исходного массива и значение = значение исходного массива (подтверждено pp::Var::DebugString).

Ожидается ли такое поведение? Если нет, что с моим кодом?

Или, есть ли другой способ передать изображение в модуль NaCl?

ответ

5

Передача холста в модуль NaCl выполняется в примере земли для загрузки текстуры из jpeg (см. Примеры/демонстрационный пример/земля в SDK).

Вот отрывок из этого примера:

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

И он должен работать.

Смежные вопросы