Join the AMA (Ask Me Anything) with the Firefox leadership team to celebrate Firefox 20th anniversary and discuss Firefox’s future on Mozilla Connect. Mark your calendar on Thursday, November 14, 18:00 - 20:00 UTC!

搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

详细了解

lines drawn in canvas element are blurry, fuzzy in FF 10

  • 2 个回答
  • 1 人有此问题
  • 9 次查看
  • 最后回复者为 PJAL

more options

I searched for blurry, fuzzy and antialiasing and found no solved replies in FireFox Help.

This code works correctly but the lines are blurry, fuzzy and wider than 1 px. This appears to be related to antialiasing. I read where there is now a built in antialiasing switch in the canvas element but none of the HTML5 references I found list this attribute.

When I enable "div" borders style="border-style:solid;" these lines are drawn correctly.

function triangle() { var c=document.getElementById("botCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.moveTo(20,20); ctx.lineTo(20,100); ctx.lineTo(70,100); ctx.closePath(); ctx.stroke(); }

I searched for blurry, fuzzy and antialiasing and found no solved replies in FireFox Help. This code works correctly but the lines are blurry, fuzzy and wider than 1 px. This appears to be related to antialiasing. I read where there is now a built in antialiasing switch in the canvas element but none of the HTML5 references I found list this attribute. When I enable "div" borders style="border-style:solid;" these lines are drawn correctly. function triangle() { var c=document.getElementById("botCanvas"); var ctx=c.getContext("2d"); ctx.beginPath(); ctx.moveTo(20,20); ctx.lineTo(20,100); ctx.lineTo(70,100); ctx.closePath(); ctx.stroke(); }

所有回复 (2)

more options

Hi!

Sorry not to be super helpful but, have you tried to search for that in MDN? https://developer.mozilla.org/en-US/

Best, Ibai

more options

On performing additional debugging I have resolved this issue. In my canvas tag I am using inline style to set the attributes of which both width and height are included. Here is an example:

<canvas id="topCanvas" style="position:absolute; top:100px; left:100px; width:900px; height:600px; border-style:solid; border-width:2px; border-color:red;">

When I remove the width and height from the inline style and enter them separately as width="900px" and height="600px" the canvas tag works as it should.

The apparent problem is that the inline style parser is most likely not correctly configuring the underlying SVG parameters. This is a bug and should be reported as such. Can someone test the code below and confirm the same results? Run this once as is and then switch the "canvas" tag with the one that is commented out and run it again. If you concur, please reply and I will mark this question as resolved. Also, if there is a way you have to make a bug report please do.

<html>
<body>

<!--
<canvas id="topCanvas" width="900px" height="600px" style="position:absolute; top:100px; left:100px; border-style:solid; border-width:2px; border-color:red;">
-->

<canvas id="topCanvas" style="position:absolute; top:100px; left:100px; width:900px; height:600px; border-style:solid; border-width:2px; border-color:red;">

<script language="javascript">
  var canvas = document.getElementById("topCanvas");  
  var ctx = canvas.getContext("2d");  
  
 
  ctx.lineWidth = 1; 
  
  ctx.strokeStyle = "red";
  ctx.beginPath();
  ctx.moveTo(40,10);
  ctx.lineTo(600,10);
  ctx.stroke();

  ctx.strokeStyle = "green";  
  ctx.beginPath();
  ctx.moveTo(20,20);
  ctx.lineTo(600,20);
  ctx.stroke();

  ctx.strokeStyle = "yellow";
  ctx.beginPath();
  ctx.moveTo(20,30);
  ctx.lineTo(600,30);
  ctx.stroke();

  ctx.strokeStyle = "olive";
  ctx.beginPath();
  ctx.moveTo(600.5,500.5);
  ctx.lineTo(60.5,60.5);
  ctx.stroke();

  ctx.fillStyle = "maroon";
  ctx.beginPath();  
  ctx.moveTo(30, 30);  
  ctx.lineTo(150, 150);  
  // was: ctx.quadraticCurveTo(60, 70, 70, 150); which is wrong.  
  ctx.bezierCurveTo(60, 70, 60, 70, 70, 150); // <- this is right formula for the image on the right ->  
  ctx.lineTo(30, 30);  
  ctx.fill();  

 ctx.fillStyle = "rgb(200,0,0)";  
 ctx.fillRect (10, 10, 55, 50);  
  
 ctx.fillStyle = "rgba(0, 0, 200, 0.5)";  
 ctx.fillRect (30, 30, 55, 50);  


</script>
</body>
</html>

由cor-el于修改