Javascript C dll将图像数据发送到XUL应用程序。帆布
我需要在XUL桌面应用程序的画布上显示一个图像(~5000*~7000像素)。 图像数据来自C-DLL,它执行基本的图像处理操作。 到目前为止,我尝试的方法存在性能问题:Javascript C dll将图像数据发送到XUL应用程序。帆布,javascript,c,dll,jsctypes,Javascript,C,Dll,Jsctypes,我需要在XUL桌面应用程序的画布上显示一个图像(~5000*~7000像素)。 图像数据来自C-DLL,它执行基本的图像处理操作。 到目前为止,我尝试的方法存在性能问题: 我尝试在dll中将图像编码为Base64,并通过js Ctypes将字符串发送到javascript,并将b64字符串设置为基本html图像对象的源代码。(~13-18秒将图像放到画布上) 我尝试将图像以jpg的形式写入硬盘,并用javascript再次加载它(~3-4秒) 我现在有以下调用我的C-DLL的函数: (vars比
有没有人知道我该如何加快速度?好的。我已经解决了我的问题。最快的方法是不让Javascript做任何事情:D 诀窍是获取图像对象的底层缓冲区(Imagedata.data.buffer)并在其周围放置Uint8ClampedArray。 图像对象的缓冲区将直接填充在C-dll中,并且不会被图像对象的“set”函数复制 这段代码需要42毫秒才能将所需的数据放到画布上。 代码如下:
copyImageData : function(pdfFilePath, pageNumber, canvas, offsetX, offsetY, scaleFactor) {
var startLoad = new Date();
var ctx = canvas.getContext('2d');
var imageData = ctx.createImageData(canvas.width, canvas.height);
var buffer = imageData.data.buffer;
var buffer8 = new Uint8ClampedArray(buffer);
var bufferPtr = ctypes.uint32_t.ptr(buffer);
copyImageData(pdfFilePath, pageNumber, bufferPtr, canvas.width, canvas.height, offsetX, offsetY, scaleFactor);
ctx.putImageData(imageData, 0, 0);
}
非常感谢分享这个!!我使用了
memset
作为本机屏幕截图插件。你的全部作品是开源的吗?你能分享一下吗?很抱歉这个项目是有偿工作的一部分,而且源代码不是开源的。如果你对某些特定的事情有疑问,请给我发个短信:-)好的,谢谢弗洛克!顺便说一句,那个项目有空缺吗?我在找;)
copyImageData : function(pdfFilePath, pageNumber, canvas, offsetX, offsetY, scaleFactor) {
var startLoad = new Date();
var ctx = canvas.getContext('2d');
var imageData = ctx.createImageData(canvas.width, canvas.height);
var buffer = imageData.data.buffer;
var buffer8 = new Uint8ClampedArray(buffer);
var bufferPtr = ctypes.uint32_t.ptr(buffer);
copyImageData(pdfFilePath, pageNumber, bufferPtr, canvas.width, canvas.height, offsetX, offsetY, scaleFactor);
ctx.putImageData(imageData, 0, 0);
}