【问题标题】:javascipt:Need to smooth the the lines drawn on canvasjavascript:需要平滑画布上绘制的线条
【发布时间】:2013-04-30 09:26:22
【问题描述】:
【问题讨论】:
标签:
javascript
canvas
drawing
html5-canvas
【解决方案1】:
方法一:
您可以通过执行以下操作“强制”画布使用抗锯齿:
ctx.translate(0.5, 0.5);
强制使用引号,因为这取决于您使用的浏览器中的实际实现。目前无法有意启用/禁用抗锯齿。
方法二:
通过将画布本身设置为双倍大小来将画布设置为“高分辨率”,但通过使用 CSS 规则设置画布元素的样式来强制它以原始大小显示:
<canvas id="myCanvas" width="1600" height="1200"
style="width:800px;height:600px" />
请记住将鼠标坐标和笔宽加倍。这将消耗 4 倍的内存和性能,但会为您提供高分辨率的线条(外观)。
在这种情况下,浏览器会将画布视为图像并像对任何缩放图像一样应用抗锯齿,而不是画布的抗锯齿方法。
请注意,这与对画布应用缩放变换不同。
在此处查看“高分辨率画布”的演示:
http://jsfiddle.net/q2t5A/
方法 3-ish:
对于实际的平滑线,您可以在此处查看我的功能:
http://www.codeproject.com/Tips/562175/Draw-Smooth-Lines-on-HTML5-Canvas
这需要一组 x/y 对并平滑线(基数样条)。这些线将穿过原始点,不需要控制点。
这当然意味着您记录了实际的点,当鼠标向上时,您使用此代码中的 curve() 函数重新绘制画布。无论如何,这将是一种正确的方法,将笔画记录在一个数组中,然后重绘(这也将允许您使用图层)。有一些解决方法可以避免使用屏幕外渲染一切
用于存储 f.ex 的画布。每一层。通过使用小的非整数偏移将画布绘制到另一个画布上将强制消除锯齿(但请参见第 1 点)。