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 ビット配列で作業してみてください。これは、1 ピクセルあたり 4 ではなく 1 つの配列要素であり、要素のカウントミスによるエラーを回避する必要があります。

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

すべてのピクセルを処理するのは正しい考えですが、特定のピクセルを白く、特定のピクセルを黒くすることはできません。

各ピクセルは、既存の値を基準にして操作する必要があります。B&W を含む特定のフィルタには式があります。輝度アルゴリズムは、探しているもののようです。たぶん、このリンクは、特に黒と白の正しい方向を示しています.

于 2013-06-14T15:37:55.890 に答える