canvas06:canvas线模糊问题

当我们在canvas中绘制一条直线,会默认线的宽度为1px,颜色为黑色。但是我们会发现线条的宽度要比1px宽,颜色也没有那么黑,更像是灰色。我们看下效果。

代码:

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        canvas {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <canvas id="mycanvas" width="200" height="200"></canvas>
</body>
</html>
<script>
    var mycanvas = document.getElementById('mycanvas');
    var ctx = mycanvas.getContext('2d');
    ctx.moveTo(50,50);
    ctx.lineTo(150,50);
    ctx.stroke()
</script>

效果:

我们边框设置的是1px,直线默认也是1px,但是我们发现直线就是比边框要粗颜色要淡。

为什么会出现这种效果呢?

原因:

    如图,我们的电脑屏幕是由一个个像素点构成,当我们在(0,0)坐标开始横向绘制一条直线时,canvas会找的y轴0px刻度的中心0.5px开始绘制。直线的宽度为0.5px到1.5px,但是又由于浏览器解析像素的最小单位为1px,所以浏览器会把0.5px解析为1px。使得直线变成了2px。颜色也会变淡。就像一瓶墨水中,只装了半瓶墨水,又装了半瓶水稀释,所以颜色会变淡了。解决办法为,movaToy轴上下移动0.5px。

    

对比代码:

    <style>
        canvas {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <canvas id="mycanvas" width="200" height="200"></canvas>
</body>
</html>
<script>
    var mycanvas = document.getElementById('mycanvas');
    var ctx = mycanvas.getContext('2d');
    ctx.moveTo(50,50);
    ctx.lineTo(150,50);
    //y轴+0.5
    ctx.moveTo(50,50.5);
    ctx.lineTo(200,50.5);
    ctx.stroke()
</script>

对比图:

不过我们在作图中可以忽略这个缺陷。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值