Czy istnieje sposób na zatrzymanie wstępnego powiększenia kanału alfa dla danych obszaru roboczego lub rozwiązania zastępczego?Jak mogę zatrzymać wstępne powiększanie alfa przy użyciu obrazu na płótnie?
Chcę wygenerować obraz (w tym przypadku niektóre losowe wartości rgba) i zapisać płótno jako obraz.
Podczas drugiego kroku chcę porównać oryginalny obraz z wygenerowanym obrazem przy użyciu imageData, jednak to nie zadziała z powodu wstępnego powiększenia kanału alfa moich pikseli rgba w wygenerowanym obrazie.
function drawImage(ctx) {
var img = ctx.createImageData(canvas.width,canvas.height);
for (var i=img.data.length;i-=4;) {
img.data[i] = Math.floor(Math.random() * 255);
img.data[i+1] = Math.floor(Math.random() * 255);
img.data[i+2] = Math.floor(Math.random() * 255);
img.data[i+3] = Math.floor(Math.random() * 255);
}
ctx.putImageData(img, 0, 0);
// our image data we just set
console.log(img.data);
// the image data we just placed onto the canvas
console.log(ctx.getImageData(0,0,canvas.width, canvas.height).data);
}
W konsoli znajdują się dwa wyjścia console.log. Pierwszy przed premipliplication, a drugi po premipliplication. Te dwa wyjścia są różne, niektóre wartości są wyłączone o 3 lub więcej. Dzieje się tak tylko w przypadku częściowej przezroczystości (alfa jest ustawione na coś innego niż 255).
Czy istnieje sposób na uzyskanie tego samego wyniku? Wszelkie pomysły na temat tego problemu? Wszelkich pomysłów, jak stworzyć coś w rodzaju obejścia tego problemu?
Z góry dziękuję!
Jestem również zainteresowany odpowiedzią na to również.Dzieje się tak tylko wtedy, gdy alfa nie jest 255. – Loktar
spójrz na specyfikację putImageData, w szczególności na końcu: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element .html # dom-context-2d-putimagedata Jedynym rozwiązaniem, które widzę, jest użycie webGL do kontrolowania sposobu obsługi rgba. – GameAlchemist