更新されたデモ
最初にアルファを 255 に設定していましたが、引き続きデータを減算したため、既に 255 に設定しているにもかかわらず、アルファ チャネルを減算しました。条件付きにするだけで済みました。
次に、値を 256 にしましたが、範囲は 0 ~ 255 です。最後になりましたが、生成部分に別のアルファ条件が必要でした。
//generate a random image
(function() {
var ct = getCTX("c0");
var imgData = ct.createImageData(400, 400);
var data = imgData.data;
for (var i = 0, j = data.length; i < j; i++) {
// Added conditional
if (i % 4 === 3){
data[i] = 255;
}else{
// random * 255 since color ranges are from 0-255
data[i] = Math.floor(Math.random() * 255);
}
}
ct.putImageData(imgData, 0, 0);
})();
function encodeWrap(id) {
return (function() {
var img = getCTX(id);
var imgData = img.getImageData(0, 0, 400, 400);
var data = imgData.data;
for (var i = 0, j = data.length; i < j; i++) {
if (i % 4 === 3){
// added condition for alpha
data[i] = 255;
}else{
// changed to 255
data[i] = (data[i] + randomValues[i]) % 255;
}
}
img.putImageData(imgData, 0, 0);
});
}
document.getElementById("bt3").addEventListener("click", function() {
var img1 = getImageData("c1"),
img2 = getImageData("c2"),
ct = getCTX("c3"),
imgData = ct.createImageData(400, 400),
data = imgData.data,
tmp;
for (var i = 0, j = data.length; i < j; i++) {
if (i % 4 === 3){
data[i] = 255;
}else{
tmp = img1[i] - img2[i];
// changed to 255 since ranges go from 0 - 255
if (tmp < 0){ tmp +=255;};
data[i] = tmp;
}
}
ct.putImageData(imgData, 0, 0);
});