我是浏览器插件和 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 秒来更改矩形颜色。有没有办法加快在浏览器插件中更改画布像素数据的过程?或者我天真的编码有什么问题?还是我的插件无法完成?