我似乎无法在html5画布上画一条线

时间:2012-05-24 05:54:47

标签: html5 google-chrome html5-canvas

我正在使用HTML5绘制一条线。但是当画布的宽度和高度很大时,它在chrome中无法正常工作。

我使用的是Chrome 19.0.1084.52,我的操作系统是Windows 7。

是否有人使用http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_canvas_line进行测试?

如果增加画布的宽度和高度,该行将消失。

chrome中是否有任何最大高度和宽度的画布,是否有人有解决方案?

4 个答案:

答案 0 :(得分:2)

这是一个有趣的问题!

使用我的Chrome和Firefox测试后,我发现:

    如果画布宽度>
  • Chrome 则不会显示任何内容的 32767
  • 如果画布宽度>
  • Firefox 不绘制任何内容的 32766

如果您的画布宽度大于该数字,则不会绘制任何内容。

我不知道为什么会有这样的限制。 也许我们可以通过浏览器的源代码找出根本原因!

以下代码就是一个例子。你可以click here to run it

<!DOCTYPE html>
<html>
<body>

If canvas width is greater than 32767, Chrome can't draw anything.<br>

<canvas id="myCanvas" width="32768" height="100"></canvas>

<script type="text/javascript">    
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.lineWidth = 5;
ctx.moveTo(10,50);
ctx.lineTo(300,50);
ctx.stroke();    
</script>

</body>
</html>

答案 1 :(得分:1)

可能存在宽度和高度限制,但我觉得这已经足够了,

这里是http://jsfiddle.net/AkashSaikia/4c75a/

玩过大号

按照w3c这里 它与无符号长度相似,约为0到4,294,967,295

interface HTMLCanvasElement : HTMLElement {
           attribute unsigned long width;
           attribute unsigned long height;

  DOMString toDataURL(optional DOMString type, any... args);
  void toBlob(FileCallback? _callback, optional DOMString type, any... args);

  object? getContext(DOMString contextId, any... args);
};

但是一旦测试需要大约0到2147483647

http://jsfiddle.net/AkashSaikia/9EWad/1/

何时或如何改变Canavas的高度和宽度?

FIY,如果你改变画布的高度和宽度属性,那么它将清除画在它上面的东西。

答案 2 :(得分:0)

该行的最大宽度和高度可能取决于所使用的浏览器。

如果要绘制非常宽的线条,则绘制一个矩形并将其转换为正确的位置并将其旋转到线条角度。

答案 3 :(得分:0)

根据我的经验,画布渲染存在大小限制,至少对于iOS设备而言。这是由于GPU内存有限,因为现在画布通常是硬件加速的。

对于iOS设备,对于具有256 + MB内存的设备,最大大小为5兆像素,对于具有较少内存的设备,最大大小为3兆像素。