0

我正在尝试创建一些像这样的图像的黑白副本

对于某些图片,它可以完美运行,而对于某些图片,我会得到这种倾斜的结果,正如您在链接上看到的那样。

这是我的代码:

var imageData = ctx.createImageData(c.width, c.height);

for (var i=0; i < imageData.data.length; i+=4) 
{
    if (someLogicRefferingToOriginalImageData == true) {
        imageData.data[i+0] = 255;
        imageData.data[i+1] = 255;
        imageData.data[i+2] = 255;
        imageData.data[i+3] = 255;
    }
    else 
    {
        imageData.data[i+0] = 0;
        imageData.data[i+1] = 0;
        imageData.data[i+2] = 0;
        imageData.data[i+3] = 255;
    }
}

ctx.putImageData(imageData,0 ,0);
4

2 回答 2

1

查看您的代码,它应该可以工作。尝试改用 32 位数组,它是每个像素一个数组元素而不是 4 个,这样可以避免元素计数错误的任何错误:

var imageData = ctx.createImageData(c.width, c.height);
var buffer = new Uint32Array(imageData.data.buffer);

for (var i=0; i < buffer.length; i++) {
    if (someLogicRefferingToOriginalImageData == true) {
        buffer[i] = 0xFFFFFFFF;
    } else {
        buffer[i] = 0xFF000000;
    }
}

imageData.data.set(new Uint8ClampedArray(buffer));
ctx.putImageData(imageData, 0, 0);
于 2017-01-18T15:13:07.393 回答
0

您对每个像素都有正确的想法,但您不能只将某些像素设为白色,将某些像素设为黑色。

每个像素都应该相对于它的现有值进行操作。某些过滤器有公式,包括黑白。亮度算法似乎是您正在寻找的。也许这里的这个链接会为你指明黑白的正确方向。

于 2013-06-14T15:37:55.890 回答