J'essaye actuellement de créer une page avec des images générées dynamiquement, qui ne sont pas des formes, dessinées dans une toile pour créer une animation.Créer manuellement des images en javascript et dessiner par rapport à la couche alpha?
La première chose que j'ai essayé était la suivante:
//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);
Le problème est que les images se chevauchent et que putImageData
simplement ... met les données dans le contexte, sans rapport au canal alpha comme spécifié dans le W3C:
pixels dans la toile sont remplacés en gros, sans composition, le mélange alpha, pas d'ombres, etc.
Donc je pensais, bien comment puis-je utiliser Image
s et non ImageData
s?
J'ai essayé de trouver un moyen de remettre l'objet ImageData
dans une image mais il semble qu'il ne peut être placé que dans un contexte de canevas. Donc, en dernier recours, j'ai essayé d'utiliser la méthode toDataURL()
d'une toile 16x8 (la taille de mes images) et de coller le résultat comme src
de mes ~ 600 images. Le résultat était beau, mais mangeait jusqu'à 100% de mon processeur ... (ce qui n'a pas été le cas avec putImageData
, ~ 5% cpu) Je suppose que pour une raison inconnue, l'image est rechargée à partir du image/png
URI de données chaque fois qu'il est dessiné ... mais ce serait tout simplement étrange ... non? Il semble également prendre beaucoup plus de RAM que ma technique précédente. Donc, en conséquence, je n'ai aucune idée de comment atteindre mon objectif.
Comment puis-je créer dynamiquement des images alpha-channelées en javascript, puis les dessiner à une vitesse appréciable sur un canevas? La seule vraie alternative est-elle l'utilisation d'une applet Java?
Merci pour votre temps.
SVG pour créer mes images? ou pour appliquer le masque alpha? Je ne suis pas vraiment sûr de savoir comment faire ça. Pour ce qui est de l'implémentation des fonctions de dessin, le code derrière ce code est natif, donc je ne pense pas que je puisse vraiment le faire. Ou manipuler le tableau de pixels de la toile entière au pixel près? ça va être assez lent ... – Manux
Manux: Penses-tu que c'est lent? Au moins V8 (utilisé dans Google Chrome) afaik compile Javascript en code natif avant de l'exécuter. – thejh
J'utilise le chrome; Je viens d'essayer ça et c'est lent, mais c'est plus rapide que d'utiliser l'URI. Je suppose que je vais devoir pirater quelque chose comme ça. – Manux