2012-04-29 8 views

答えて

9

これは、実際の線がキャンバス上にあるすべてのピクセルに描画されているためです(キャンバスの位置合わせは浮動小数点型です)。あなたがキャンバス上でjavascriptで正確な縦線または横線を描画したいときは、それらを半分のintにするのがよいでしょう。

図を参照してください。最初の水平線はy位置1で描画されました。この線はぼやけて広がっています。 2番目の水平線は、4.5のy位置で描かれています。それは薄く正確です。あなたのコードでたとえば

enter image description here

、私はこれまで、あなたの水平線のループを変更することで、良い結果を持っていた:

   // Horizontal lines 
       for (var i = 1; i < objCanvas.height/intGridWidth; i++) 
       { 
        objContext.strokeStyle = "white"; 
        var y = Math.floor(i*intGridWidth)+0.5 
        objContext.moveTo(0, y); 
        objContext.lineTo(objCanvas.width, y); 
        objContext.stroke(); 
       } 

はここで非常に薄く、きれいなラインでそれを実証フィドルです:

これは終わっているすべてのピクセルに線が描かれているという事実は、d生の水平線は、ちょうど1ピクセルの幅で中央を対象とします。私は通常私のキャンバスベースのアプリケーションでutilの機能のこの種を持っている:もちろん

function drawThinHorizontalLine(c, x1, x2, y) { 
    c.lineWidth = 1; 
    var adaptedY = Math.floor(y)+0.5; 
    c.beginPath(); 
    c.moveTo(x1, adaptedY); 
    c.lineTo(x2, adaptedY); 
    c.stroke(); 
} 

は、あなたがより良い格好良いページを持つことが、あまりにも縦のラインのためにそれを行うだろう。

+0

私はそれをもっと明確にするためのスキーマを作った:http://canop.org/blog/?p=220 –

+0

恐ろしい!これは完璧です。おかげさまで、お早めにお返事しないと申し訳ありません。 – hoylemd

0

私はぼやけて見えません。おそらく、あなたのOSやPCと関係があるかもしれませんが、それは描画を適切に描画できません。私はWin 7でChrome 20を使用しています。試してみてください。

+0

私はWindows 7でもChrome 18.0.1025.162 mを使用しています。私はまた、最新のFirefoxで試してみましたが、まだまだ色褪せています。 – hoylemd

0

あなたはこのようなobjContext.lineWidthを定義する必要があります。最後の行はいえ薄れますなぜ

objContext.lineWidth = 2; 

私はよく分かりません。 を参照してください。http://jsfiddle.net/jSCCY/

+0

そのような助けがありましたが、私がそれを1つのidに設定すると、すべての行のために退屈なことが今行われます。私はラインを本当に薄くしたい。 これは私が今持っているものです:http://jsfiddle.net/jSCCY/7/ – hoylemd

関連する問題