HTML5 Canvas画线技巧——实现绘制一个像素宽的细线

bswys

bswys

2016-02-19 10:31

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐HTML5 Canvas画线技巧——实现绘制一个像素宽的细线,希望大家看完后也有个好心情,快快行动吧!
正统的HTML5 Canvas中如下代码

代码如下:

ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10, 100);
ctx.lineTo(300,100);
ctx.stroke();

运行结果绘制出来的并不是一个像素宽度的线

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

很不一样,难道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画线的一个小技巧

觉得不错请顶一下。
展开更多 50%)
分享

猜你喜欢

HTML5 Canvas画线技巧——实现绘制一个像素宽的细线

Web开发
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线

HTML5 Canvas像素处理使用接口介绍

Web开发
HTML5 Canvas像素处理使用接口介绍

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

HTML5 Canvas——用路径描画线条实例介绍

Web开发
HTML5 Canvas——用路径描画线条实例介绍

HTML5 canvas 基本语法

Web开发
HTML5 canvas 基本语法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

HTML5 Canvas概述

Web开发
HTML5 Canvas概述

HTML5 实现一个访问本地文件的实例

Web开发
HTML5 实现一个访问本地文件的实例

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

让网页上的超链接失效不能点击的js代码

让网页上的超链接失效不能点击的js代码

红颜末世指尖细碎流年 - QQ图案分组

红颜末世指尖细碎流年 - QQ图案分组
下拉加载更多内容 ↓