【发布时间】:2021-02-16 18:36:10
【问题描述】:
我有一个包含相应图像的掩码数据的数组,我需要将其传递给用 emscripten 编译的 c++ 函数。掩码数组由 -1 到 255 的值组成,所以我猜必须使用 Int16Array 来表示这些值。是否可以将此数组作为指向 wasm 模块的指针传递?我知道我必须分配内存并传递指针,但我被困在下面的代码上。如何正确分配和设置指针,以便 c++ 函数看到正确的数据?
得到的maskData为:
const mData = ctx.getImageData(0, 0, canvas.width, canvas.height);
var data = Array.prototype.slice.call(mData.data);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
let data = imageData.data;
const dataLength = data.length;
const maskDataLength = maskData.length;
var dataPointer = Module._malloc(dataLength * data.BYTES_PER_ELEMENT);
var maskDataPointer = Module._malloc(maskDataLength * 2);
Module.HEAPU8.set(data, dataPointer);
Module.HEAP16.set(maskData, maskDataPointer);
let result = Module.ccall(
"process",
"number",
["number", "number", "number", "number", "number"],
[dataPointer, dataLength, maskDataPointer, pos, neg]
);
data = new Int16Array(Module.HEAP16.buffer, result, dataLength);
Module._free(dataPointer);
Module._free(maskDataPointer);
Module._free(result);
【问题讨论】:
标签: javascript c++ memory webassembly emscripten