Maison  >  Article  >  interface Web  >  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

黄舟
黄舟original
2017-03-03 15:53:081981parcourir

Le code suivant dans le canevas HTML5 orthodoxe

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

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;
};

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();

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) !


Déclaration:
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