经过一些艰苦的调试后,我想我在iPad Safari的canvas.drawImage()
实现中发现了一个错误。特别是这种过载:
void drawImage(in HTMLImageElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh);
在切割图像并将其缩小时,似乎Safari有时会忘记切割图像并简单地缩小整个图像。这是随机发生的,但我已经能够在清除safari缓存后一直在iPad上重现它。这是代码:
<script>
draw = function() {
var ctx = document.getElementById('cc').getContext('2d');
var timg = new Image()
timg.onload = function() {
ctx.fillStyle = 'rgb(100,100,100)';
ctx.fillRect(0,0,256,256);
ctx.drawImage(timg, 0,0, 128, 128, 0, 0, 63,63);
ctx.drawImage(timg, 0,0, 128, 128, 128, 0, 65,65);
};
timg.src = "http://amirshimoni.com/ipadbug1/1234.jpg";
};
</script>
<body onload="draw();">
<canvas id="cc" width="256" height="128"></canvas>
</body>
此错误似乎不存在于任何其他浏览器上,包括桌面Safari。如果你在iPad上刷新页面,它似乎也会消失。
我对drawImage()
做错了吗?
任何人都可以弄清楚为什么会发生这种情况,如果有特定的价值我可以简单地避免这样就不会发生......或者其他一些解决方法?
答案 0 :(得分:1)
此错误似乎已在iOS 4.2中修复。至少,我不认为它会再发生了。