首頁 > web前端 > H5教程 > 主體

HTML5 Canvas中繪製一個像素寬的細線實作程式碼詳情

黄舟
發布: 2017-03-03 15:53:08
原創
1992 人瀏覽過

正統的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畫線的一個小技巧

覺得不錯請頂一下。

 以上就是HTML5 Canvas中繪製一個像素寬的細線實作程式碼詳情的內容,更多相關內容請關注PHP中文網(www .php.cn)!



相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板