0

我是浏览器插件和 firebreath 的新手。我尝试构建一个解码 h264 数据包的插件,然后将视频帧显示到浏览器 html5 上的画布标签中。但我测试通过我的插件修改 100x100 画布像素,只需 3-4 秒即可更改矩形颜色。

这是我的 html 代码的一部分

<canvas id="myCanvas" width="100" height="100"></canvas>

这是我在 body 标记内的 javascript 的一部分

<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var imgData=ctx.createImageData(100,100);
for (var i=0;i<imgData.data.length;i+=4) {
    imgData.data[i+0]=255;
    imgData.data[i+1]=0;
    imgData.data[i+2]=0;
    imgData.data[i+3]=255;
}
ctx.putImageData(imgData,0,0);

function delayFunctionTest() {
    console.log('test\n');
    plugin().changeImagePixel(imgData.data);
    ctx.putImageData(imgData,0,0);
}
setTimeout(function(){delayFunctionTest()}, 2000);
</script>

这是我的pluginapi.cpp

void sanypluginAPI::changeImagePixel(FB::JSObjectPtr& imageData)
{
    unsigned long i;

    for(i=0;i<imageData->GetProperty("length").convert_cast<unsigned long>();i+=4){
        imageData->SetProperty(i, 0);
        imageData->SetProperty(i+1, 100);
        imageData->SetProperty(i+2, 155);
        imageData->SetProperty(i+3, 255);
    }
}

上面的代码在控制台上显示单词“test”后需要 3-4 秒来更改矩形颜色。有没有办法加快在浏览器插件中更改画布像素数据的过程?或者我天真的编码有什么问题?还是我的插件无法完成?

4

1 回答 1

1

没有办法直接访问画布像素数据;你最好的选择是(现在不要打我)对它进行base64编码并将其作为字符串传递给javascript,然后对其进行解码。

是的,我知道。我知道。

于 2013-04-17T23:23:43.753 回答