Transparenz eine gefüllte Kontur in HTML5
Arbeite ich an einem doodlen app in HTML5 und ich würde gerne eine Art von Eimer-Funktion. Die Idee ist, einen Pfad zu zeichnen und es wird geschlossen und gefüllt mit der gewählten Farbe (die Farbe des Strichs). Es funktioniert sehr gut mit Uni-Farben, aber wenn ich eine transparente Kontur und Fläche, die ich laufen in dieses problem: http://imgur.com/0N3MW
Was passiert, ist das füllen erfolgt, bis die Mitte des Strichs (die tatsächliche sampling-Punkt des Pfades), so gibt es eine Linie von der Hälfte der Größe des Strichs innerhalb der Form, die ist dunkler, weil es die Kreuzung der Strich-und Füllfarbe.
Sehen Sie Abhilfe für dieses?
Kann ich leider nicht posten JSFiddle jetzt, weil es auf NUR-LESE-Modus. Aber Sie sollten in der Lage sein zu sehen, was ich spreche, Leben in dieser sandbox: http://bit.ly/AbaMLl
(Die website und Bibliothek ist unabhängig von dem, was ich verwende, es ist nur eine Leinwand sanbox ich gefunden habe)
Irgendwelche Ideen/leads willkommen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, verwenden Sie
ctx.globalCompositeOperation = 'destination-atop';
und es sollte so Aussehen, wie Sie erwarten sind.Etwa so: http://jsfiddle.net/UcyX4/
(Nehmen Sie die Zeile, um zu sehen, das problem, das Sie haben)
Angenommen es ist nicht die einzige Sache, gezeichnet auf Leinwand, sind Sie wahrscheinlich gehen zu müssen, zeichnen Sie diese in ein temporäres canvas-Bereich und ziehen Sie dann, die Leinwand auf Ihre normale, sonst kann es ruinieren alle der zuvor gezeichneten Formen. So müssten Sie ein system wie das so: http://jsfiddle.net/dATfj/
edit: code eingefügt bei jsfiddle Fehler:
html:
Skript:
Simon ' s Antwort war richtig, aber es scheint jetzt, dass Chrome 36 korrigiert einen Fehler, der Auswirkungen auf seine Lösung, und es funktioniert nicht mehr. Es auch schon nicht mehr auf Firefox und es scheint zu sein, das erwartete Verhalten: https://bugzilla.mozilla.org/show_bug.cgi?id=898375
So, wie tun Sie dies?
Zuerst müssen Sie eine weitere Leinwand.
Zeichnen Sie Ihren ausgefüllten und streichelte Form auf dieser Leinwand ohne Deckkraft (nicht in der Farbe und keine globalAlpha).
Nun, ziehen, legen Sie die globalAlpha zu was auch immer Sie wollen auf Ihrem Haupt-Leinwand.
Zeichnen Sie die erste Leinwand, die auf Ihrem Haupt.
Legen Sie die globalAlpha, um alles, was Sie hatte auf Ihrem Haupt-Leinwand.
Getan.
2018 Antwort : verwenden Sie
context.globalAlpha
ex :
context.globalAlpha = 0.2;