REMARQUE: Cela a à voir avec la façon toile éléments sont rendus au moment de l'échelle, pas à faire avec la façon dont les lignes ou les graphiques sont rendus sur une surface de toile. En d'autres termes, cela a tout à voir avec l'interpolation de l'échelle des éléments, et rien à voir avec l'anticrénelage des graphismes dessinés sur une toile. Je ne suis pas préoccupé par la façon dont le navigateur trace des lignes; je me soucie de la façon dont le navigateur rend la toile de l'élément lui-même quand il est mis à l'échelle.
Est-il une toile de propriété ou les paramètres du navigateur, je peux la changer par programmation pour désactiver l'interpolation lors de la mise à l'échelle <canvas>
éléments? Un cross-browser solution est idéale, mais pas essentiel; basé sur Webkit navigateurs sont mon objectif principal. La Performance est très important.
Cette question est très similaire, mais ne pas illustrer le problème suffisamment. Pour ce que ça vaut, j'ai essayé image-rendering: -webkit-optimize-contrast
, en vain.
L'application sera une "rétro" 8-bits de style de jeu écrit en HTML5+JS pour faire comprendre ce dont j'ai besoin.
Pour illustrer, voici un exemple. (version live)
Supposons que j'ai un 21x21 sur la toile...
<canvas id='b' width='21' height='21'></canvas>
...qui a css qui rend l'élément 5 fois plus grande (105x105):
canvas { border: 5px solid #ddd; }
canvas#b { width: 105px; height: 105px; } /* 5 * 21 = 105 */
Je dessine un simple " X " sur la toile comme suit:
$('canvas').each(function () {
var ctx = this.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(21,21);
ctx.moveTo(0,21);
ctx.lineTo(21,0);
ctx.stroke();
});
Sur l'image de gauche est ce que le Chrome (14.0) rend. L'image de droite est ce que je veux (dessinés à la main pour des fins d'illustration).