ホームページ >ウェブフロントエンド >H5 チュートリアル >HTML5 Canvas でピクセル幅の細い線を描画するためのコードの詳細

HTML5 Canvas でピクセル幅の細い線を描画するためのコードの詳細

黄舟
黄舟オリジナル
2017-03-03 15:53:082032ブラウズ

オーソドックスなHTML5 Canvasの以下のコード

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

演算結果はピクセル幅の線ではありません


よく見る色々な描画とは違う、太い感じですWeb版の線効果

は、HTML5 Canvasのほうがよく考えられていたのではないでしょうか

実は、根本的な理由は、Canvasの描画が途中から開始されないことです

でも0から1ではなく0.5~1+0~0.5の描き方なので

だとエッジにフェードがかかって線が太く見えます。

解決策は2つあり、1つは転位被覆法、もう1つは中心

平行移動(0.5、0.5)です。実装コードは以下の通りです:

転位カバレッジメソッド 元のコンテキストの関数にパッケージ化しました


/**
 * <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 は自動的にエッジ アンチエイリアス

を実装し、1 ピクセルの直線が太く見えます。

実行中のエフェクト:


今のエフェクトはどうですか?これはHTML5 Canvasの線画のためのちょっとしたトリックです

良いと思ったら、いいねしてください。

上記は、HTML5 Canvas でピクセル幅の細い線を描画するためのコードの詳細です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。