PhoneGapとCanvas
ふと、思いついて、何か作ってみようと思って。
そんで、Cancasにちょろっと描画しようと思ったら、あら大変。
なんか、線描いたら滲んでるように見えたんでんすよね。
// id="mycanvas"である、canvas要素を確保 var canvas = $( '#mycanvas' )[0]; var ctx = canvas.getContext( '2d' ); ctx.lineWidth = 1; // 白でクリア ctx.fillStyle = "rgb(255, 255, 255)"; ctx.fillRect( 0, 0, canvas.width, canvas.height ); // 黒で水平ラインと、垂直ラインを引く ctx.strokeStyle = "rgb(0, 0, 0)"; ctx.beginPath(); ctx.moveTo( 20, 20 ); ctx.lineTo( 320, 20 ); ctx.moveTo( 20, 30 ); ctx.lineTo( 20, 300 ); ctx.stroke();
で、これをiOSシミュレータで見ると、ちょっと太く見えるわけですね。
あれ?って思って、ctx.lineWidth = 1;
を追加しても改善されず。
で、このページを見つけて、調整してみました。
HTML5 Canvasのブラウザによって異なる微妙な振る舞いについてまとめてみた。
http://d.hatena.ne.jp/mindcat/20100815/1281877127
iOS上のSafariにおける注意点
- 水平ラインの始点は、y座標のみピクセルの中央にくるように0.5足す
- 垂直ラインの始点は、x座標のみピクセルの中央にくるように0.5足す
- strokeRectでは、左上の座標をピクセルの中央にする
なので、以下のように設定するといい感じになる。
// 黒で水平ラインと、垂直ラインを引く ctx.strokeStyle = "rgb(0, 0, 0)"; ctx.beginPath(); ctx.moveTo( 20, 20.5 ); ctx.lineTo( 320, 20.5 ); ctx.moveTo( 20.5, 30 ); ctx.lineTo( 20.5, 300 ); ctx.stroke();
でも、まだまだ、やっぱ分からないことが多くて、
仕様書とか読めばいんですけどね、ほんとは。
さっきも、ラインの終点は描画されるのか、されないのか調べて、
ラインの終点ピクセルが描画されていないのを確認しました。
arc関数の中心もピクセルの中央のじゃなきゃいけないのかな?とか、
ひとつひとつ確認してみようと思います。
おしまい。
Leave a Comment