小编Luk*_*z B的帖子

强制firefox在img.src更改后重新加载图像

我正在修改画布上的一些图像,然后将这些图像的src设置为新的base64编码图片.

img.src = changeColor(img);
Run Code Online (Sandbox Code Playgroud)

changeColor返回base64编码图像:

return canvas.toDataURL();
Run Code Online (Sandbox Code Playgroud)

src更改后Chrome和Opera是令人耳目一新的图像,但是firefox没有!我还通过FireBug检查了图像元素,它显示了新的src和新图像!

我已经尝试将数据添加到URL但是呃......这是一个base64编码的图像,而不是网址,所以它完全打破了我的图片.

我有什么办法强制重新加载图像或通过JavaScript禁用firefox缓存?

更新:我也试过设置image.src =''; 在changeColor函数中.它适用于chrome,但在firefox中...图片消失,并且在我设置新的base64值时不再出现.

html javascript firefox canvas

6
推荐指数
1
解决办法
3067
查看次数

如何将canvas imageData传递给emscripten c++程序而不复制它?

我有画布的图像数据:

myImage = ctx.getImageData(0, 0, 640, 480);
Run Code Online (Sandbox Code Playgroud)

我发现,我可以创建新的Uint8Array并用于set()复制图像数据。这是工作示例:

var numBytes = width * height * 4;
var ptr= Module._malloc(numBytes);
var heapBytes= new Uint8Array(Module.HEAPU8.buffer, ptr, numBytes);
heapBytes.set(new Uint8Array(myImage.data));
_processImage(heapBytes.byteOffset, width, height);
myImage.data.set(heapBytes);
Run Code Online (Sandbox Code Playgroud)

但是,不幸的是,每个.set()操作都比处理图像慢得多,并且上面的代码比 JS 实现慢!

所以,我想处理图像而不复制它。我可以通过这种方式成功地将数据直接读取和写入到堆中:

Module.HEAPU8.set(myImage.data, myImage.data.byteOffset);
_processImage(myImage.data.byteOffset, width, height);
myImage.data.set(new Uint8ClampedArray(Module.HEAPU8.buffer , myImage.data.byteOffset , numBytes));
Run Code Online (Sandbox Code Playgroud)

它更快,但第一个.set()执行仍然需要 17 毫秒。

C++函数原型为:

extern "C" {

    int processImage(unsigned char *buffer, int width, int height)
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

有没有办法将数组传递给C++而不使用set()?只是告诉c++数据在内存中的位置,并允许修改它?

javascript c++ canvas emscripten asm.js

5
推荐指数
1
解决办法
2015
查看次数

如何在 JavaScript 中实现引用计数?

如何在 JavaScript 中实现引用计数?目的是在创建第一个实例或销毁最后一个实例时触发构造函数/析构函数。

我需要实现三种类:抽象类、单例类和普通类(继承或不继承)。

我尝试实现包含所有实例数组的 ClassDispatcher 类,但删除它们并不会删除引用...

Module = function(parentModule)
{
    this.destroyInstance = function()
    {
        Module.prototype.referenceCounter--;
    }
    this.initInstance = function()
    {
        Module.prototype.referenceCounter++;
    }

    this.initInstance();
}
Module.prototype.referenceCounter = 0;
Run Code Online (Sandbox Code Playgroud)

javascript constructor destructor reference-counting javascript-objects

2
推荐指数
1
解决办法
2302
查看次数