UIWebView w/HTML5 Canvas&Retina Display

Axe*_*eva 5 iphone html5 canvas uiwebview retina-display

我的应用程序有一个UIWebView,用于提供本地内容.如果我拍摄视网膜大小的图像并将其用作身体的背景,我可以使用CSS -webkit-background-size属性使其正确缩放.这让我在iPhone 4上获得了清晰,清晰的图像.

但是,HTML5 Canvas标签不是那么合作.当我使用drawImage命令将相同的视网膜尺寸图像放入HTML5画布时,它是巨大的 - 远远超过物理屏幕的界限.这是我正在使用的代码:

ctx.drawImage(retinaImage, 0, 0)
Run Code Online (Sandbox Code Playgroud)

如果我尝试在其上放置高度和宽度参数drawImage,图片会向下缩小以适应屏幕,但它是块状和像素化的.不像CSS背景那样清脆.

有没有我可以用于HTML5 Canvas的技巧,相当于CSS -webkit-background-size属性?

谢谢!

更新:

这是我用来解决这个问题的最终代码.希望它能帮助未来的其他人:

        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);
        }
Run Code Online (Sandbox Code Playgroud)

Rob*_*eca 4

查看http://joubert.posterous.com/crisp-html-5-canvas-text-on-mobile-phones-and。看起来如果您将尺寸乘以 devicePixelRatio,然后按该比例缩放,它应该可以工作。

这是一些对我有用的伪代码。

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);
Run Code Online (Sandbox Code Playgroud)

让我知道这是否能为您解决问题!