Updated Demo
먼저 당신은 여전히 데이터를 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);
});
위, 무슨 바보 같은 오류. +1에 대한 수정. 하지만 문제의 일부만 수정하면 이미지를 해독 한 후에 캔버스에 임의로 나타나는 다채로운 픽셀이 여전히 있습니다. – fb55
@ FB55 흠. 네, 위의 코드로 성취하려는 노력이 무엇인지 모르겠습니다. 나는 픽셀이 너무 많이 보였다는 것을 알았지 만, 그것이 의미하는 바가 있다고 가정했다. 하지만 그것과 추측하는 것은이 부분과 관련이 있습니다. if (tmp <0) tmp + = 256; – Loktar
@ FB55가 완벽하게 작동했습니다. 자신이하고있는 일을 이해하기 위해 비디오를보아야 만했다면, 약간의 변경이 필요하다는 것을 발견했습니다. 관련 코드는 내가 한 일에 대한 설명과 함께 답안에 있습니다. – Loktar