Ticket #4374

異なる%表示でBBボタン後のグラフ位置が微妙に変わる
Open Date: 2004-05-29 19:45 Last Update: 2004-09-01 13:11

Reporter:
Owner:
Type:
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
3
Severity:
5 - Medium
Resolution:
None
File:
None

Details

異なる%表示でBBボタン後のグラフが微妙にずれます.
たとえば,100% で BBを押し,75%表示してもう一度BBボタンを
押しなおすと,グラフの描画座標が微妙に変わる.

Ticket History (3/3 Histories)

2004-05-29 19:46 Updated by: orrisroot
  • (Group change on Tracker)
2004-08-09 14:53 Updated by: kuromaru
  • Owner Update from (None) to kuromaru
2004-09-01 13:11 Updated by: kuromaru
  • Ticket Close date is changed to 2004-09-01 13:11
  • Status Update from Open to Closed
Comment
Logged In: YES
user_id=9078

文字を指定されたフォント名・フォントサイズ・フォントスタイル
によって描画するには、java.awt.Font というクラスを用います。
今までは、Font クラスのインスタンスを作成するときに、属性と
して持っているフォントサイズに倍率を乗じて作成していました。
例えば、フォントサイズの属性で 20pt という値を持っている場合
には、倍率 50% のときには 0.5*20 = 10 pt の値を Font クラスの
コンストラクタの引数で渡して、Font クラスのインスタンスを作成
していました。
ところで、Font クラスには、文字列のバウンディングボックスを
求めるgetStringBounds というメソッドがあります。(引数で
文字列を渡します。)
実は、このメソッドを用いて、異なるフォントサイズで同じ文字列の
バウンディングボックスを求めた場合、得られた矩形のサイズ(横幅)
の比は、単純にフォントサイズの比に一致しません。例えば、10pt
のフォントから得られた、ある文字列の矩形の横幅が 100pt だった
場合、20pt のフォントから得られた同じ文字列の矩形の横幅は
丁度 200pt にはならず、1-5pt ほどずれてしまいます。
何故このようなことが起こるのかは Font クラスの内部での処理を
調べないと分かりませんが、結局はこれが原因で、グラフ内の
オブジェクトを配置するときに数ピクセルの誤差が生じていました。
解決策としては、バウンディングボックスを求めるときに用いる
Font クラスのインスタンス作成時にはフォントサイズに倍率を
乗ぜず、元の属性のフォントサイズで得られたバウンディング
ボックスのサイズに倍率を乗じるようにしました。こうすると
バウンディングボックスのサイズは倍率に比例しますので、誤差は
生じなくなり、倍率の変化に伴う微妙なずれは無くなります。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login