私はマウスの移動イベントを使用してペン描画ツールをシミュレートしようとしています。キャンバス描画高解像度imag webView
elCanvas.on("mousedown", function(e){
moving = true;
var position = getPos(e);
points = [];
points.push(position);
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.beginPath();
ctx.moveTo(position.x, position.y);
}
elCanvas.on("mousemove", function(e){
if (moving) {
var curr = getPos(e);
points.push(curr);
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
var p1 = points[0];
var p2 = points[1];
ctx.beginPath();
ctx.moveTo(p1.x, p1.y);
for (var i = 1, len = points.length; i < len; i++) {
var midPoint = midPointBtw(p1, p2);
ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);
p1 = points[i];
p2 = points[i + 1];
}
ctx.lineTo(p1.x, p1.y);
ctx.stroke();
}
このコードはSafariで正常に動作しています。しかし、マウスはmac上のwebViewでひどく遅れています。私は現在、iMac 5Kディスプレイでテスト中です。
また、私が気付いたことの1つは、コードがOSXが提供する新しいWebViewクラス(WKWebView)でうまく動作していることです。しかし、それは64ビットの要件を持っています。
だから私は4kまたは5kのモニターでmac webviewで作業したいと思っています。
また、同じwebViewで同じ設定でうまく動作しているwww.awwapp.comと結果を比較しています。
注:滑らかさのために、ポイントの再描画ロジックが必要です。移動ごとに盲目的にストロークすると、大雑把な描画になります。 Safariでこのコードが正常に動作しているので、私の主な関心事はWebViewの速度が遅いことです。
あなたはもパフォーマンスの損失を持っています。なぜあなたはそれぞれの 'mousemove'のすべての点の間にすべてのカーブを描きますか?最後の点と新しい点の間に曲線を描くだけでいいです。 – MysterX
それはそれぞれの点の後で盲目的にストロークすると荒い描画になるからです。ここに示すようにhttp://perfectionkills.com/exploring-canvas-drawing-techniques/ そして、このコードはサファリの下でうまくいきます。だから私はWebViewコードでも改善のチャンスがあると思う。 – Vrishank