Html Canvas Returns "off-by-some" Bytes From Getimagedata
Solution 1:
Firefox pre-multiplication rounding error
I can confirm that FF (Firefox) does indeed return the pixel value as [12,189,148,62]
When rendering to the canvas pixels are processed according to the value of globalCompositeOperation which defaults to "source-over". The calculation is performed on pre multiplied alpha values for which FF seams to be rounding incorrectly.
Note that turning off alpha canvas.getContext("2d", {alpha: false}) for CanvasRenderingContext2D the resulting pixels are FF [3,46,36,255] and Chrome [3,45,35,255].
Chrome has the correct values as shown in the following snippet.
// correct pre mult alpha console.log([12,187,146].map(c =>Math.round(c * 62 / 255)) + "");FF is rounding up for some reason and I would consider this a bug
This rounding error (in FF) is then effecting the result of "source-over" compositing when alpha: true resulting in the higher than expected values.
For more information on compositing W3C Compositing and Blending
Fix?
I can not suggest a fix, only to say that Chrome is rendering the image correctly, while FF is not.
Post a Comment for "Html Canvas Returns "off-by-some" Bytes From Getimagedata"