2012-03-30 10 views
8

Estoy dibujando un mapa en un lienzo con cuadrados de 40px * 40px. Todo está bien hasta que, al desplazar el lienzo (usando la transformación), desplazar el mapa. Entonces, de la nada, las líneas aparecen entre las baldosas. Ver imágenes a continuación.Líneas no deseadas que aparecen en el lienzo html5 con mosaicos

¿Por qué?

Canvas drawn, but no offset yet. All is fineCanvas drawn w offset, now where did those lines come from?

+0

Una parte de tu código será útil –

Respuesta

15

Esto se ve como de punto flotante de posicionamiento (por ejemplo, usted ha desplazado hasta 100.5, 100.5) se combina con el filtrado bilineal mayoría de los navegadores utilizan para mostrar las imágenes en el lienzo 2D.

Básicamente, si dibujaImage() una imagen entre píxeles, cada píxel se suaviza en dos píxeles, lo que significa que los bordes dibujan un 50% de alfa sobre el fondo. Esto rompe el mosaico, porque el borde del siguiente mosaico es el mismo, y dibuja un 50% de alfa sobre el 50% de alfa del otro mosaico, lo que agrega hasta un 75% de alfa. Esto aparecerá más claro o más oscuro (dependiendo del color de fondo) que el resto del mosaico. Así que obtienes "costuras" a lo largo de los bordes de las baldosas.

Para corregir: Math.round() las coordenadas de tu imagen, así como cualquier llamada a translate() (ya que traducir por medio píxel tiene el mismo efecto). Esto garantiza que todo se dibuja en una cuadrícula alineada con píxeles y nunca se arruga.

+0

Sí, encontré este yo mismo en realidad, y tu respuesta es perfecta. Resulta que si usa algo más que un entero para compensar el lienzo, estas líneas aparecen. Así que simplemente usé Math.floor (offsetX) y resolví el problema. – Pedro

+0

Math.round también resolvió el problema para mí. ¡Salvador de la vida! ¡Gracias! – masnun