3

我正在关注以下教程:http ://www.html5canvastutorials.com/tutorials/html5-canvas-lines/

我的问题是这条线变得模糊,不像他们网站上的那样坚固和美丽。

这是代码:

    var canvas = document.getElementById("rightSide");
    var context = canvas.getContext("2d");

    context.beginPath();
    context.moveTo(50, 100);
    context.lineTo(200, 100);
    context.stroke();


#leftSide {
    width:200px;
    padding:15px;
    background:#eee;
    border:1px solid #aaa;
    float: left;
}

#rightSide {
    width:1000px;
    height: 700px;
    padding:15px;
    background:#eee;
    border:1px solid #aaa;
    float: left;
    margin:0px 0px 0px 20px;
}

<div id="leftSide">
    <a class="trigger" href="#">Areas</a>
    <ul class="level1">
                <li><a href="http://www.google.com">Area 1</a></li>
                <li><a href="#">Area 2</a></li>
                <li><a href="#">Area 3</a></li>
                <li><a href="#">Area 4</a></li>
                <li><a href="#">Area 5</a></li>
                <li><a href="#">Area 6</a></li> 
    </ul>

</div>

<canvas id="rightSide"></canvas>

谢谢

编辑:我实际上发现了一些非常有趣的东西,但我仍然不明白它有什么不同。当我将画布大小坐标从 CSS 移动到标签时,该行显示正常。

画布 id="rightSide" width="800px" height="600px">

非常想解释一下这里发生了什么。谢谢。

4

2 回答 2

4

为了建立在 Parth 的答案(在评论中正确识别),画布的实际大小是在属性上定义的,而不是 CSS。

例如,如果您有以下代码,绘图区域将是 100x100 而不是 200x200。模糊效果与使用相同 CSS 的 100x100 图像相同。

<style>
    canvas {width: 200px; height: 200px}
</style>
<canvas width="100" height="100"></canvas>

这实际上对 iPhone 4 或 iPad 3 等设备产生了有趣的影响,每个设备像素都有四个物理像素。在这种情况下,适当大小的画布(100x100 的 100x100 会模糊)。在这种情况下,您实际上需要将画布加倍以获得清晰的图像:

<style>
    canvas {width: 200px; height: 200px}
</style>
<canvas id="retina" width="400" height="400"></canvas>
于 2012-05-23T22:58:20.597 回答
0

浏览器通常对绘制的线进行抗锯齿(实际上任何使用上下文函数的东西,如 lineTo、arcTo、quadraticCurveTo)。

所以,如果你给了起点(50,50)和终点(300,50),它会反锯齿,所以绘制的线会显示模糊,因为它会在49.5-50 &&中绘制模糊的线颜色55-55.5(如果线宽为 5)。

因此,有时解决方案是以浮点形式给出坐标。浏览器接受浮点坐标并且不忽略它,它会在其画线算法中使用浮点数(可能是dda,我不知道确切)。

这是示例 :: http://jsfiddle.net/parth1403/xt7dN/2/

于 2012-05-18T07:16:20.830 回答