Maison > interface Web > Tutoriel H5 > Détails du code pour dessiner une ligne fine de la largeur d'un pixel dans HTML5 Canvas

Détails du code pour dessiner une ligne fine de la largeur d'un pixel dans HTML5 Canvas

黄舟
Libérer: 2017-03-03 15:53:08
original
2002 Les gens l'ont consulté

Le code suivant dans le canevas HTML5 orthodoxe

ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(10, 100);
ctx.lineTo(300,100);
ctx.stroke();
Copier après la connexion

Le résultat de l'opération n'est pas une ligne d'une largeur d'un pixel


C'est si épais. C'est très différent des différents effets de lignes de dessin souvent vus sur la version Web

. Est-ce du HTML5 ? Canvas ne s'attendait pas à faire mieux

En fait, la raison fondamentale est que le dessin de Canvas ne part pas du milieu

mais de 0~ 1. Il n'est pas dessiné de 0,5 à 1 0 à 0,5, donc

fait que le fondu soit au bord et la ligne semble très large .

Il existe deux solutions, l'une est la méthode de couverture des luxations et l'autre est la translation centrale

(0,5, 0,5). Le code d'implémentation est le suivant :

Méthode de couverture des luxations Je l'ai empaqueté dans une fonction du contexte d'origine


/**
 * <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;
};
Copier après la connexion

center Le code de la méthode de traduction est le suivant :


	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();
Copier après la connexion

Faites particulièrement attention à vous assurer que tous vos points de coordonnées sont des entiers, sinon HTML5 implémente automatiquement l'anticrénelage des bords

Cela donne également à l'une de vos lignes droites de pixels un aspect plus épais.

Effet de l'opération :


Quel est l'effet maintenant ? Il s'agit d'une ligne HTML5 Canvas ? dessin Un petit truc

Si vous pensez que c'est bien, n'hésitez pas à mettre un pouce bleu.

Ce qui précède contient les détails du code permettant de tracer une ligne fine de la largeur d'un pixel dans HTML5 Canvas. Pour plus de contenu connexe, veuillez faire attention au PHP. Site chinois (www .php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal