检查画布是否为黑色

时间:2014-05-24 02:57:43

标签: javascript html5 canvas html5-canvas

我有一个脚本拍摄照片并创建黑白R,G和B通道。我想知道有多少频道有些东西(黑色=没有颜色,白色=颜色数据)。

它的工作原理是遍历每个像素并将数据保存在3个不同的画布元素中。每个人都有不同的渠道。

效果很好但是当我只给出红色和蓝色图片时,绿色通道(显然)是完全黑色的。

所以我的问题是,如何检查画布是否完全是黑色的?我想避免遍历每个频道中的每个像素,看看它是否全黑。

欢呼声

2 个答案:

答案 0 :(得分:3)

好的我已经测试了一些东西,我能想出的最简单的解决方案是创建一个1x1的屏幕外画布,然后绘制你想要检查数据的图像或原始画布,缩小到1像素并检查它(我还添加了基本缓存)。

这不是一个精确的检查,结果取决于像素数据在原始图像中的分布情况,正如GameAlchemist所指出的,如果你想要准确,如果检查结果为0,你可以循环遍历所有像素。结果

function quickCheck(img){
    var i = arguments.callee; //caching the canvas&context in the function
    if(!i.canvas){i.canvas = document.createElement("canvas")} 
    if(!i.ctx)   {i.ctx    = i.canvas.getContext("2d")}

    i.canvas.width=i.canvas.height = 1;
    i.ctx.drawImage(img,0,0,1,1);
    var result = i.ctx.getImageData(0,0,1,1);
    return result.data[0]+result.data[1]+result.data[2]+result.data[3];
}

答案 1 :(得分:0)

你必须迭代画布的像素数据 - 没有神奇的方法可以避免这种情况。

迭代2张图像的性能成本微不足道(2幅图像=您的正面图像和背面图像)。

[访问提问者网站后删除了必要的部分答案]