2017-03-25 8 views
1

現在、プログラムはRGBの色を画像の半分に変更していますが、グレーの色合いを変更するだけのボタンを作る方法はわかりません。つまり、値0は白黒画像とスタートアップ画像の最大値になります。ボタンで画像のグレーネスを調整する(JavaScript)

ご協力いただきありがとうございます。

これは、現在のコードである:https://codeshare.io/5ezjmL

+0

私はあなたが '私は' ここzmany変数に含まれていないと信じて:(zmanyは==場合0){zmiany = -1; rysuj();} –

+0

JSFiddleを提供してください – Mazz

答えて

0

あなたが所望の効果を達成するためにsaturation blending modeを使用することができる:上部層の彩度を採用しながら

は、底層の輝度及び色相を保存します。ここで

ランダム画像上にこのブレンドモードを実証する例です。

// Desaturate given a factor between 0 - 1: 
 
function desaturate(ctx, factor, width, height) { 
 
    ctx.globalCompositeOperation = "saturation"; 
 
    ctx.fillStyle = "rgba(255,255,255,"+factor+")"; 
 
    ctx.fillRect(0, 0, width, height); 
 
} 
 

 
// Example: 
 
function randomize(ctx, width, height) { 
 
    let imageData = ctx.getImageData(0, 0, width, height), 
 
     data = imageData.data; 
 
    for (let i = 0; i < data.length; i += 4) { 
 
    let r = Math.random() * 256; 
 
    data[i + 0] = 255; data[i + 1] = r; data[i + 2] = 255 - r; 
 
    data[i + 3] = i/data.length * 256; 
 
    } 
 
    ctx.putImageData(imageData, 0, 0); 
 
} 
 

 
let canvas = document.getElementById("canvas"), 
 
    ctx = canvas.getContext("2d"), 
 
    input = document.getElementById("factor"); 
 

 
input.addEventListener("change", function(e) { 
 
    let factor = e.target.valueAsNumber; 
 
    randomize(ctx, canvas.width, canvas.height); 
 
    desaturate(ctx, factor, canvas.width, canvas.height); 
 
}); 
 

 
randomize(ctx, canvas.width, canvas.height);
<input id="factor" type="number" value="0" min="0" max="1" step="0.1"> 
 
<br> 
 
<canvas id="canvas">

関連する問題