キャンバスにフリーハンドのストロークを以下のようなコードでペイントします。私はどのくらいのキャンバスがストロークで覆われているか確認する必要があります。それを確認する良い方法は何ですか?私が考えることができる唯一のことは、マウスアップイベントで特定の色を持つピクセルの数を数えることです。しかし、それは遅いために不自由です...塗りつぶし領域の面積を計算する方法は?
助けてください?
$(document).ready(function(){
var draw = false;
var x_prev = null, y_prev = null;
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
canvas.mousedown(function(e){
draw = true;
x_prev = e.pageX - this.offsetLeft;
y_prev = e.pageY - this.offsetTop;
});
window.mouseup(function(){draw=false});
canvas.mousemove(function(e){
if(draw){
context.beginPath();
context.moveTo(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
context.lineTo(x_prev, y_prev);
context.stroke();
context.closePath();
x_prev = e.pageX - this.offsetLeft;
y_prev = e.pageY - this.offsetTop;
}
});
どのくらい太い線ですか?また、アンチエイリアスを考慮していますか? – Blender
は任意に厚い。厚さはハードコードされています。私はアンチエイリアスについてあまり気にしない、私は良い近似を与える何かが必要です。これはゲームのためであり、私は高精度を必要としません。 – akonsu
ラインオーバーラップはどうやって処理しますか?あなたは 'area + = thickness * sqrt((e.pageX - this.offsetLeft - x_prev)^ 2 +(e.pageY - this.offsetTop - y_prev)^ 2);'を使うことができますが、交差する線。 – Blender