tutorial open example iphone html5 canvas uiwebview retina-display

iphone - open - uiwebview tutorial



UIWebView con HTML5 Canvas y Retina Display (1)

Mi aplicación tiene un UIWebView que sirve contenido local. Si tomo una imagen de tamaño de retina y la utilizo como fondo para el cuerpo, puedo hacer que -webkit-background-size correctamente usando la -webkit-background-size CSS -webkit-background-size . Esto me da una imagen nítida y clara en el iPhone 4.

Sin embargo, la etiqueta HTML5 Canvas no es tan cooperativa. Cuando uso el comando drawImage para colocar la misma imagen de retina en un lienzo HTML5, es gigantesca, mucho más allá de los límites de la pantalla física. Este es el código que estoy usando:

ctx.drawImage(retinaImage, 0, 0)

Si intento colocar los parámetros de altura y ancho en la drawImage del drawImage , la imagen se reduce para ajustarse a la pantalla, pero es cuadrada y pixelada. No es nítido como el fondo CSS.

¿Hay algún truco que pueda usar para el lienzo HTML5 que sea equivalente a la -webkit-background-size CSS -webkit-background-size ?

¡Gracias!

Actualizar:

Aquí está el código final que utilicé para resolver este problema. Esperemos que ayude a alguien más en el futuro:

if (window.devicePixelRatio == 2) { myCanvas.setAttribute(''height'', window.innerHeight * 2); myCanvas.setAttribute(''width'', window.innerWidth * 2); ctx.scale(2, 2); } else { myCanvas.setAttribute(''height'', window.innerHeight); myCanvas.setAttribute(''width'', window.innerWidth); }


Consulte http://joubert.posterous.com/crisp-html-5-canvas-text-on-mobile-phones-and . Parece que si multiplicas las dimensiones por el dispositivo PixelRatio, entonces escala en esa proporción y debería funcionar.

Aquí hay un pseudo-código que funcionó para mí.

var ctx = myCanvasElem.getContext("2d"); ctx.attr("width", width * window.devicePixelRatio); ctx.attr("height", height * window.devicePixelRatio); ctx.scale(window.devicePixelRatio, window.devicePixelRatio); ctx.drawImage(img, x, y, width, height);

¡Avíseme si eso lo resuelve por usted!