HTML5 Canvas中实现绘制一个像素宽的细线
admin
2023-06-11 13:01:44
0

正统的HTML5 Canvas中如下代码

ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(10, 100); ctx.lineTo(300,100); ctx.stroke();
运行结果绘制出来的并不是一个像素宽度的线

HTML5 Canvas中实现绘制一个像素宽的细线

感觉怎么好粗啊,跟常常见到的网页版各种绘制线效果

很不一样,难道HTML5 Canvas就没想到搞好点嘛

其实这个根本原因在于Canvas的绘制不是从中间开始的

而是从0~1,不是从0.5~1 + 0~0.5的绘制方式,所以

导致fade在边缘,看上去线很宽。

解决方法有两个,一个是错位覆盖法,另外一种是中心

平移(0.5,0.5)。实现代码如下:

错位覆盖法我已经包装成一个原始context的函数

/**  * 

draw one pixel line

* @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中实现绘制一个像素宽的细线

现在效果怎么样,这个就是HTML5 Canvas画线的一个小技巧

觉得不错请顶一下。

相关内容

热门资讯

伊朗:过去24小时有32艘船只... 当地时间25日,伊朗伊斯兰革命卫队海军称,过去24小时内,包括油轮、集装箱船和其他商船在内的32艘船...
想去海边过盛夏!华为nova ... 就在刚刚华为终端正式官宣了nova 16系列及全场景新品发布会。说实话,我第一眼看到视频的时候,还真...
华为突破半导体规则引爆中国芯片... 快科技5月25日消息,今天在电气电子工程师学会IEEE主办的2026国际电路与系统研讨会ISCAS现...
宁德,被主机厂“逼”着投Dee... 文 | 超聚焦 DeepSeek的绯闻东家,多了一个宁王。 5月23日,据The Informat...
武契奇被授予“友谊勋章” 5月25日,中华人民共和国“友谊勋章”颁授仪式在北京举行。塞尔维亚总统武契奇被授予“友谊勋章”。(摄...
起底煤矿“暗面”:假整改、假密... 5月22日,山西长治市沁源县通洲集团留神峪煤矿发生瓦斯爆炸,造成82人死亡、2人失联、128人受伤。...
AI驱动文化产业发展:无论技术... 2026文化强国建设高峰论坛人工智能驱动文化产业创新发展论坛22日在深圳举行。与会嘉宾聚焦“AI重构...
原创 美... 原创首发 | 金角财经(ID: F-Jinjiao) 作者 | Chester 中美机器人,到底谁更...
小米SU7现身西班牙塞维利亚 ... 【CNMO科技消息】5月25日,有外媒报道称,近日一辆小米SU7现身西班牙塞维利亚。有技术人士在车内...
从“数字门牌”到“智能入口” ... 人民网记者 黄盛 “十五五”时期,在“人工智能+”行动全面实施的过程中,中文域名如何借助AI技术实现...