J'ai un élément de canevas HTML qui est redimensionné lorsque l'utilisateur redimensionne l'écran.
canvas.height = pageHeight(); canvas.width = pageWidth();
Le redimensionnement réel fonctionne bien, mais il met en évidence le canevas.
J'aimerais garder le contenu. Existe-t-il une autre méthode pour changer la taille d'un élément de toile, ou existe-t-il un moyen de stocker le contenu et de les ramener à la toile?
Vous devez redimensionner le canevas avec CSS ou redessiner le canevas après le redimensionnement.
Si vous souhaitez enregistrer le contenu du canevas et le redessiner, je peux penser à quelques options:
context.getImageData
pour saisir le canevas entier, redimensionner le canevas, puis utiliser context.putImageData
pour le redessiner à la nouvelle échelle. Image
, définissant la source dans le résultat de canvas.toDataUrl()
, redimensionnez le canevas, puis dessinez l'image à la nouvelle échelle. context.setScale(xscale, yscale)
et appelez n'importe quelle fonction que vous avez utilisée pour dessiner la toile à l'origine. En supposant que vous configurez correctement xscale
et yscale
, cela yscale
automatiquement tout à la nouvelle taille. context.drawImage(oldCanvas, ...)
pour copier l'ancien canevas sur le nouveau. Ensuite, vous changerez l'ancienne toile avec la nouvelle. Les deux premières options ne fonctionneront pas si vous avez tracé une image d'un domaine différent sur le canevas à tout moment et ne sont pas prises en charge par d'anciennes implémentations.
À mon avis, l'option 3 (redessiner l'image à la nouvelle échelle) est la meilleure s'il est possible. C'est la seule option qui permettra de garder vos lignes complètement lisses et pointues, et cela fonctionnera toujours (en supposant que vous disposez toujours de toutes les informations pour générer l'image).