- 2009-09-29 (Tue) 22:20
- プログラム
車載動画に、現在地の地図を重ねて表示できるとかっこいいかも、と思って試しています。GPSのログは1秒ごとにしか記録されないので、そのまま描画すると昔のカーナビのようにカクカクしてしまいます。最近のナビやiPhoneのGoogleマップは補間してなめらかに動くので真似をしてみたのですが、1pxより細かく動かすと地図の形が崩れて困っていたのです。線の太さを中途半端な値にしてみてもダメでした。
で、RenderingHints.KEY_STROKE_CONTROLを変えてみて、解決しました。drawは線分の端点がぴったり画面のピクセルに収まるように補正していたのですね。確かに、(0, 0)-(10,0)の1px幅の黒い線分を描画したときに、灰色の2px幅の線が引かれると普通は嫌ですね。
↓サンプルアプリのスクリーンショットを2倍に拡大したものです。実寸表示しないと違いが分からないかも。
右に行くほど、y座標が0.1pxずつ下がっていきます。一番下の文字列は
AffineTransform transform = new AffineTransform();
transform.translate(x, y);
g.fill(new TextLayout("L", g.getFont(), g.getFontRenderContext()).getOutline(transform));
のようにして描画しています。
- drawは小数点以下を切り捨てているのに、drawStringは四捨五入している?
- drawString、fillはKEY_STROKE_CONTROLの値に影響されない。(Strokeがこの値を見ている?)
のですね。
- Test.java(2.2KB)
(追記)
http://java.sun.com/j2se/1.3/ja/docs/ja/guide/2d/new_features.html#SO
にSunの解説がありました。
このページを見て驚いたのが・・・全く関係ありませんが、QuadCurve2D、CubicCurve2Dで2次方程式と3次方程式を解けたのですね。
- Newer: 猫
- Older: 宅急便って意外に高いのね
Comments:0
Trackback+Pingback:0
- TrackBack URL for this entry
- http://zenjiro.dyndns.org/program/renderinghintskey_stroke_control/trackback/
- Listed below are links to weblogs that reference
- RenderingHints.KEY_STROKE_CONTROL from ぜんのホームページ