Je pense qu'il est commun de dessiner toute la scène chaque fois que vous voulez changer quelque chose, alors:
context.drawImage(bgImage, 0, 0);
context.drawImage(overlayImage, overlayOffsetX, 0);
MISE à JOUR
Vous pouvez composer manuellement les données d'image de deux images avec prise copie des données d'image d'arrière-plan
ou
faire quelque chose plus facile, probablement plus rapide. Vous pouvez créer un nouvel élément canvas (sans attachement au document) qui stockera les données d'image dans un format facile à gérer. putImageData
est bon si vous voulez placer une image rectangulaire dans la toile. Mais si vous voulez mettre de l'image avec de la transparence, des canevas supplémentaires vous aideront. Voyez si l'exemple ci-dessous vous satisfait.
// preparation of canvas containing data of overlayImage
var OVERLAY_IMAGE_WIDTH = 320;
var OVERLAY_IMAGE_Height = 400;
var overlayImageCanvas = document.createElement('canvas');
overlayImageCanvas.width = OVERLAY_IMAGE_WIDTH;
overlayImageCanvas.height = OVERLAY_IMAGE_HEIGHT;
overlayImageCanvas.getContext('2d').putImageData(overlayImage, 0, 0);
// drawing scene, execute this block every time overlayOffsetX has changed
context.putImageData(bgImage, 0, 0);
context.drawImage(overlayImageCanvas, overlayOffsetX, 0);
J'ai deux ensembles de données de pixels obtenus à partir de ces deux images en utilisant getImageData. donc mes données de superposition sont beaucoup plus petites et je dois placer ceci sur les données de fond à une certaine position, cela peut être placé sur le canevas en utilisant putImageData pour toute la grande image combinée - mais je crois comprendre que ces deux doivent être fusionnées ? – davivid
qui a très bien fonctionné! et semble très rapide, je n'ai pas réalisé que vous pourriez le faire de cette façon semble très utile. merci – davivid
Conseil pour l'optimisation des performances http://ajaxian.com/archives/canvas-image-data-optimization-tip – powtac