2016-07-02 6 views
-1

HTML5-Leinwand. Meine Zeichnung ist nicht glatt. Ich habe alles versucht

var canvas; 
 
var context; 
 
var isDrawing = false; 
 

 
window.onload = function() 
 
{ 
 
\t canvas = document.getElementById("canvas"); 
 
\t context = canvas.getContext("2d"); 
 

 
\t canvas.width=window.innerWidth; 
 
\t canvas.height=window.innerHeight; 
 
\t canvas.addEventListener("mousemove", putPoint); 
 
\t canvas.addEventListener("mousedown", engage); 
 
\t canvas.addEventListener("mouseup", disengage); 
 
\t canvas.addEventListener("mouseout", disengage); 
 
\t context.lineWidth = 2*radius; 
 
\t \t context.lineJoin = context.lineCap = 'round'; 
 
}; 
 
var radius=0.5; 
 

 
var engage = function(e) 
 
{ 
 
\t isDrawing = true; 
 
\t putPoint(e) 
 
} 
 

 
var disengage = function() 
 
{ 
 
\t isDrawing = false; 
 
\t context.beginPath(); 
 
} 
 

 
var putPoint=function (e) 
 
{ 
 
\t if(isDrawing) 
 
\t { 
 
\t \t context.lineTo(e.clientX-canvas.offsetLeft, e.clientY-canvas.offsetTop); 
 
\t \t context.stroke(); 
 
\t \t context.beginPath(); 
 
\t \t context.arc(e.clientX-canvas.offsetLeft, e.clientY-canvas.offsetTop, radius, 0, Math.PI*2); 
 
\t \t context.fill(); 
 
\t \t context.beginPath(); 
 
\t \t context.moveTo(e.clientX-canvas.offsetLeft, e.clientY-canvas.offsetTop); 
 
\t 
 
\t } 
 

 
}
body 
 
{ 
 
\t margin: 2px;; 
 
} 
 
canvas 
 
{ 
 
\t border: 1px solid black; 
 
\t display:block; 
 
}
<!DOCTYPE html> 
 
<html lang="pl"> 
 
<head> 
 
\t <meta charset="utf-8"> 
 
\t <title> Drawing app </title> 
 
\t <link href="style.css" rel="stylesheet"> 
 
\t <script src="script2.js"> </script> 
 

 
</head> 
 
<body> 
 
\t <canvas id="canvas" width="1900" height="1000"> Your browser doesn't support canvas. </canvas> 
 
</body> 
 
</html>

Dies ist mein Code. Bitte versuche etwas zu zeichnen. Sie sollten viele Pixel sehen. Es sieht schrecklich aus. Ich würde gerne so aussehen: https://sketch.io/sketchpad/. Bitte stellen Sie dort 1px ein und überprüfen Sie es. Es ist eine schöne, glatte Linie ohne Pixel. Ich möchte es erreichen.

Hier ist schöne Zeichnung: http://codepen.io/kangax/pen/zofsp. Aber: - Jedes Mal, wenn Sie einen neuen Pfad zeichnen -> Leinwand wird gereinigt. Es wird durch die 26. Codezeile verursacht. - Wenn ich es lösche (ich meine 26. Zeile des Codes) Zeichnung bricht: c

Was ich ausprobiert habe? -schattierungen -Gradienten -ctx.translate (0,5,0,5); -bezier Kurve Und es funktioniert nicht.

Ich nehme an, dass schöne Linien, die ich mit diesem erhalten kann: ctx.clearRect (x1, y1, x2, y2).

Aber ich habe keine Ideen, wie es zu benutzen: c

Ich werde Zeichnung App erstellen, so muss ich glatte Linien.

Antwort

0

Mausdaten sind immer eine, aber grobe und es gibt viele Möglichkeiten, wie Sie es glätten können. Der heilige Gral für die Linienglättung ist eine Bezier-Fit, aber ich muss noch herausfinden, wie man das in Echtzeit macht. finden Sie in der folgenden anwser https://stackoverflow.com/a/33882382/3877726

Die zweitbeste Lösung ist optimiert und die Linie zu einem appox fit Glättung ..

eher wieder die Antwort als schreiben

Es bietet eine Möglichkeit die Optimierung zu setzen und Glättung von keiner (manchmal wollen Sie die Beulen und Klumpen) bis hin zu super glatt ..