2012-02-17 1 views
1

Je veux dessiner une forme fermée (Utilisation de chemins) & ma largeur de trait est 10. Maintenant, je veux remplir cette forme, je peux le remplir en utilisant la fonction fill() de le contexte. Mais, quand je veux changer alpha de ma forme, alors & coup de recouvrement de zone de remplissage à la frontière de la forme.Fill & Stoke problème de largeur en html 5 toile

Je veux seulement remplir la zone de forme qui reste noire après mon coup. J'ai joint l'image d'expliquer mon problème.

Click here to show shape with stork & fill bug.

Comme vous pouvez le voir dans jsFiddle, - Couleur de la zone de chevauchement sont de couleur composite. Ce que je ne veux pas. Je veux que ce soit exactement la même chose que dans la bordure (ou couleur de trait avec alpha). - Je ne suis pas autorisé à spécifier la zone de remplissage du chemin fermé. (Il n'y a pas de méthode de contexx.) - Je ne peux pas utiliser "glabalCompositeOperation", car je dessine plus de 1 formes dans 1 toile dans mon application .

Répondre

0

L'effet que vous obtenez semble être une propriété de la façon dont la toile dessine des lignes autour d'une forme. La moitié de l'épaisseur de la ligne est dessinée à l'intérieur de la forme et la moitié en dehors de la forme. Un moyen consiste à dessiner la forme remplie et la bordure comme des chemins séparés. Les modifications à effectuer pour votre exemple sont illustrées ci-dessous. Ce sera plus difficile avec des formes irrégulières.

  var canvas = document.getElementById("myCanvas"); 
      var context = canvas.getContext("2d"); 
      var topLeftCornerX = 188; 
      var topLeftCornerY = 50; 
      var width = 200; 
      var height = 100; 
      var linewidth = 10; 

      context.globalAlpha = 0.5; 
      context.beginPath(); 
      context.moveTo(topLeftCornerX, topLeftCornerY); 
      context.lineTo(topLeftCornerX+width,topLeftCornerY); 
      context.lineTo(topLeftCornerX+width,topLeftCornerY+height); 
      context.lineTo(topLeftCornerX,topLeftCornerY+height); 
      context.closePath(); 
      context.fillStyle = "#FF0000"; 
      context.fill(); 
      context.beginPath(); 
      context.moveTo(topLeftCornerX-linewidth/2, topLeftCornerY-linewidth/2); 
      context.lineTo(topLeftCornerX+width+linewidth/2,topLeftCornerY-linewidth/2); 
      context.lineTo(topLeftCornerX+width+linewidth/2,topLeftCornerY+height+linewidth/2); 
      context.lineTo(topLeftCornerX-linewidth/2,topLeftCornerY+height+linewidth/2); 
      context.closePath(); 
      context.lineWidth = linewidth; 
      context.strokeStyle = "#00FF00"; 
      context.stroke(); 
+0

merci pour la réponse. Mais dans mon cas, j'ai toujours besoin de tracer un chemin complexe. Une solution que j'ai trouvée est celle de remplir l'élément d'abord et puis le caresser en utilisant "globalCompositeOperation = copy". Mais je ne vais aider que si l'on veut seulement 1 forme dans la toile. Mais dans mon cas j'ai déjà dessiné de nombreuses formes sur toile, j'ai besoin de dessiner une autre forme sur d'autres formes. Je peux aussi dessiner cela mais j'ai besoin d'utiliser une toile temporaire et dessiner une nouvelle forme sur celle-ci, puis en utilisant "drawImage", dessiner une forme sur la toile principale. Mais je ne veux pas de toile temporaire. – Parth

Questions connexes