Al escribir píxeles en un contexto de lienzo HTML usando putImageData
, los valores de píxel no son exactamente los mismos cuando los vuelvo a buscar. He puesto un sample test page mostrando el problema. Reducida, el problema es:¿Por qué HTML Canvas getImageData() no devuelve exactamente los mismos valores que se acaban de establecer?
var id = someContext.getImageData(0,0,1,1);
id.data[0]=id.data[3]=64; // 25% red, 25% alpha
id.data[1]=id.data[2]=0; // No blue or green
someContext.putImageData(id,0,0);
var newData = someContext.getImageData(0,0,1,1);
console.log(newData.data[0]);
En Chrome V8, el valor de rojo regresa como 63
; en Firefox v3.6, Safari v5 e IE9 el valor rojo vuelve como 67
(todo en Windows). En OS X, Chrome v7, Safari v5 y Firefox v3.6 también vuelven como 67
. ¡Ninguno de ellos vuelve como el valor 64
originalmente establecido!
El uso de setTimeout
para retrasar el ajuste y la recuperación no tiene importancia. Cambiar el fondo de la página no hace diferencia. Usar save()
y restore()
en el contexto (por this unlikely article) no hace ninguna diferencia.
He puesto otra página de prueba que muestra los [efectos de alfa en un conjunto/valor devuelto] (http://phrogz.net/tmp/htmlcanvas_putimagedata2.html). Cuanto más bajo sea el alfa, más variados serán los resultados. Configurando 'R: 5 G: 0 B: 0 A: 1' regresa como' R: 255 G: 0 B: 0 A: 1'. – Phrogz
¿Alguna vez pudo solucionar este problema? – Billy
@Billy No; incluso las especificaciones HTML5 tienen una Nota (ver el enlace en mi comentario a continuación) sobre el hecho de que set/get puede dar como resultado valores diferentes. – Phrogz