NOTA : Isso tem a ver com a forma como os elementos da tela existentes são renderizados quando redimensionados , não com a maneira como as linhas ou os gráficos são renderizados em uma superfície da tela . Em outras palavras, isso tem tudo a ver com interpolação de elementos dimensionados e nada a ver com antialiasing de gráficos desenhados em uma tela. Não estou preocupado com o modo como o navegador desenha linhas; Preocupo-me com a forma como o navegador renderiza o próprio elemento da telaquando é ampliado.
Existe uma propriedade da tela ou uma configuração do navegador que eu possa alterar programaticamente para desativar a interpolação ao dimensionar <canvas>
elementos? Uma solução entre navegadores é ideal, mas não essencial; Navegadores baseados em Webkit são meu principal alvo. O desempenho é muito importante.
Essa pergunta é muito semelhante, mas não ilustra o problema suficientemente. Pelo que vale a pena, tentei image-rendering: -webkit-optimize-contrast
sem sucesso.
O aplicativo será um jogo com estilo "retro" de 8 bits, escrito em HTML5 + JS para deixar claro o que eu preciso.
Para ilustrar, aqui está um exemplo. ( versão ao vivo )
Suponha que eu tenho uma tela 21x21 ...
<canvas id='b' width='21' height='21'></canvas>
... com css que torna o elemento 5 vezes maior (105x105):
canvas { border: 5px solid #ddd; }
canvas#b { width: 105px; height: 105px; } /* 5 * 21 = 105 */
Eu desenho um simples 'X' na tela assim:
$('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();
});
A imagem à esquerda é o que o Chromium (14.0) renderiza. A imagem à direita é o que eu quero (desenhada à mão para fins ilustrativos).