I'm currently trying to create a page with dynamically generated images, which are not shapes, drawn into a canvas to create an animation.
The first thing I tried was the following:
//create plenty of those:
var imageArray = ctx.createImageData(0,0,16,8);
//fill them with RGBA values...
//then draw them
ctx.putImageData(imageArray,x,y);
The problem is that the images are overlapping and that putImageData
simply... puts the data in the context, with no respect to the alpha channel as specified in the w3c:
pixels in the canvas are replaced wholesale, with no composition, alpha blending, no shadows, etc.
So I thought, well how can I use Image
s and not ImageData
s?
I tried to find a way to actually put the ImageData
object back into an image but it appears it can only be put in a canvas context. So, as a last resort, I tried to use the toDataURL()
method of a 16x8 canvas(the size of my images) and to stick the result as src
of my ~600 images.
The result was beautiful, but was eating up 100% of my CPU...(which it did not with putImageData
, ~5% cpu) My guess is that for some unknown reason the image is re-loaded from the image/png
data URI each time it is drawn... but that would be plain weird... no? It also seems to take a lot more RAM than my previous technique.
So, as a result, I have no idea how to achieve my goal.
How can I dynamically create alpha-channelled images in javascript and then draw them at an appreciable speed on a canvas?
Is the only real alternative using a Java applet?
Thanks for your time.