帝王谷资源网 Design By www.wdxyy.com
正统的HTML5 Canvas中如下代码
复制代码代码如下:
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10, 100);
ctx.lineTo(300,100);
ctx.stroke();
运行结果绘制出来的并不是一个像素宽度的线
![HTML5 Canvas画线技巧——实现绘制一个像素宽的细线](/UploadFiles/2021-03-30/201382163536750.png?20137216366)
感觉怎么好粗啊,跟常常见到的网页版各种绘制线效果
很不一样,难道HTML5 Canvas就没想到搞好点嘛
其实这个根本原因在于Canvas的绘制不是从中间开始的
而是从0~1,不是从0.5~1 + 0~0.5的绘制方式,所以
导致fade在边缘,看上去线很宽。
解决方法有两个,一个是错位覆盖法,另外一种是中心
平移(0.5,0.5)。实现代码如下:
错位覆盖法我已经包装成一个原始context的函数
复制代码代码如下:
/**
* <p> draw one pixel line </p>
* @param fromX
* @param formY
* @param toX
* @param toY
* @param backgroundColor - default is white
* @param vertical - boolean
*/
CanvasRenderingContext2D.prototype.onePixelLineTo = function(fromX, fromY, toX, toY, backgroundColor, vertical) {
var currentStrokeStyle = this.strokeStyle;
this.beginPath();
this.moveTo(fromX, fromY);
this.lineTo(toX, toY);
this.closePath();
this.lineWidth=2;
this.stroke();
this.beginPath();
if(vertical) {
this.moveTo(fromX+1, fromY);
this.lineTo(toX+1, toY);
} else {
this.moveTo(fromX, fromY+1);
this.lineTo(toX, toY+1);
}
this.closePath();
this.lineWidth=2;
this.strokeStyle=backgroundColor;
this.stroke();
this.strokeStyle = currentStrokeStyle;
};
中心平移法代码如下:
复制代码代码如下:
ctx.save();
ctx.translate(0.5,0.5);
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10, 100);
ctx.lineTo(300,100);
ctx.stroke();
ctx.restore();
要特别注意确保你的所有坐标点是整数,否则HTML5会自动实现边缘反锯齿
又导致你的一个像素直线看上去变粗了。
运行效果:
![HTML5 Canvas画线技巧——实现绘制一个像素宽的细线](/UploadFiles/2021-03-30/201382163536751.png?201372163731)
现在效果怎么样,这个就是HTML5 Canvas画线的一个小技巧
觉得不错请顶一下。
复制代码代码如下:
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10, 100);
ctx.lineTo(300,100);
ctx.stroke();
运行结果绘制出来的并不是一个像素宽度的线
![HTML5 Canvas画线技巧——实现绘制一个像素宽的细线](/UploadFiles/2021-03-30/201382163536750.png?20137216366)
感觉怎么好粗啊,跟常常见到的网页版各种绘制线效果
很不一样,难道HTML5 Canvas就没想到搞好点嘛
其实这个根本原因在于Canvas的绘制不是从中间开始的
而是从0~1,不是从0.5~1 + 0~0.5的绘制方式,所以
导致fade在边缘,看上去线很宽。
解决方法有两个,一个是错位覆盖法,另外一种是中心
平移(0.5,0.5)。实现代码如下:
错位覆盖法我已经包装成一个原始context的函数
复制代码代码如下:
/**
* <p> draw one pixel line </p>
* @param fromX
* @param formY
* @param toX
* @param toY
* @param backgroundColor - default is white
* @param vertical - boolean
*/
CanvasRenderingContext2D.prototype.onePixelLineTo = function(fromX, fromY, toX, toY, backgroundColor, vertical) {
var currentStrokeStyle = this.strokeStyle;
this.beginPath();
this.moveTo(fromX, fromY);
this.lineTo(toX, toY);
this.closePath();
this.lineWidth=2;
this.stroke();
this.beginPath();
if(vertical) {
this.moveTo(fromX+1, fromY);
this.lineTo(toX+1, toY);
} else {
this.moveTo(fromX, fromY+1);
this.lineTo(toX, toY+1);
}
this.closePath();
this.lineWidth=2;
this.strokeStyle=backgroundColor;
this.stroke();
this.strokeStyle = currentStrokeStyle;
};
中心平移法代码如下:
复制代码代码如下:
ctx.save();
ctx.translate(0.5,0.5);
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10, 100);
ctx.lineTo(300,100);
ctx.stroke();
ctx.restore();
要特别注意确保你的所有坐标点是整数,否则HTML5会自动实现边缘反锯齿
又导致你的一个像素直线看上去变粗了。
运行效果:
![HTML5 Canvas画线技巧——实现绘制一个像素宽的细线](/UploadFiles/2021-03-30/201382163536751.png?201372163731)
现在效果怎么样,这个就是HTML5 Canvas画线的一个小技巧
觉得不错请顶一下。
帝王谷资源网 Design By www.wdxyy.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
帝王谷资源网 Design By www.wdxyy.com
暂无评论...
更新日志
2024年07月03日
2024年07月03日
- 原画壁纸及美图第259期,无水印可自取
- 原画壁纸及美图第260期,无水印可自取
- 原画壁纸及美图第261期,无水印可自取
- 绝区零能量鸣徽有哪些 绝区零能量鸣徽效果介绍
- 绝区零引燃鸣徽有哪些 绝区零引燃鸣徽效果介绍
- 绝区零丽娜技能强度怎么样 丽娜技能加点推荐
- 《七龙珠电光炸裂ZERO》新增角色一览
- 《修仙神诀》游戏下载方法
- 《幻兽帕鲁》恐炬灵种族值介绍
- 胡又天《她说HQ》头版限量[低速原抓WAV+CUE]
- 韵味悠扬如诗如画《草原的骄傲3CD》DTS[WAV]
- 雨果唱片《秦王点兵LP1630》WAV+CUE
- 《战意》官宣上架WeGame平台 国内首个腾讯网易双服共营游戏
- 卡普空收购中国台湾CG工作室 曾参与《龙之信条2》《生化危机8:村庄》开发
- 韩妹《妮姬:胜利女神》COS图赏:身材优势尽显