2012年6月13日水曜日

AndroidのCanvasの描画でsetAntialias()すべき時、すべきでない時

AndroidのCanvasで直接何かを描画する時に、ギザギザ(ジャギー)を恐れてとりあえずPaint.setAntialias(true)していた。

確かにギザギザにはならないのだけど、このように滲んでしまうことがある。


同じ設定で線を引いているのだけど、場所によって色が薄くなったり、太さが微妙に違う。

エミュレーターのせいかとも思ったが、実機で動作させても同じ。何が問題なのか?と思ったら、どうやらsetAntialias(true)がマズかったらしい。

setAntialias(false)でアンチエイリアスをOFFにするとこのようにクッキリ正しく描画されたから。


教訓。つまり、AndroidのCanvasの描画では何でもかんでもアンチエイリアスをかけてはいけないということ。

アンチエイリアスすべき時
  • 角度をつけた直線を描画する時
  • 角度をつけた矩形を描画する時
  • 円・楕円を描画する時
  • 文字を描画する時
など。

アンチエイリアスすべきでない時
  • 角度がつかない直線を描画する時
  • 角度がつかない矩形を描画する時
など。