掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Imageに描画する際のWidthに関して (ID:42394)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Windowsで四角形を描画する場合、右と下の端は除外されます。 ヘルプでFillRectをひくとそういう説明があると思いますが、Rectangleにも同じことがあてはまります。 これはDelphiに限ったことではなく、Windowsの一般的なルールです。 例えばImageのサイズが4×4だとしましょう。 (0,0)-(4,4)という矩形を指定して描画すると、次のような4×4の大きさの枠が描画されます。 この時、右の端は枠の内側、つまり3の位置にきます。下の端も同様です。 01234 0■■■■| 1■□□■| 2■□□■| 3■■■■| 一方、(4,0)-(4,4)という座標を指定して線を引くと、これは指定どおり座標4に描かれます(上の図の縦棒の部分)。 これはImageの外なので見えなくなるわけです。 Windowsプログラミングでは、矩形の座標を次のように計算するよう定義しています。 Right = Left + Width Bottom = Top + Height しかし、方眼紙などに描いて考えてみるとわかると思いますが、本当は1を引かないと右と下の座標になりません。 描画の際に右と下が除外されるので、特に意識しなくても辻褄が合っているわけです。 もっとも、この仕様は別に計算を楽にするためではなく、スケーリングを正しく行うためにあります。 このあたりの事情は The Old New Thing で解説されていますね(英語の記事ですが) http://blogs.msdn.com/b/oldnewthing/archive/2004/02/18/75652.aspx 蛇足ついでに、直線を引くときにも実は最後の1ピクセルは描画されません。 MoveTo(0,0); LineTo(100, 0); LineTo(100, 100); とすると、最初の直線は手前の(99,0)で終わります。 しかし2本目の最初のピクセルが(100,0)になるので隙間はできません。 これはご想像の通り、同じピクセルを二重に描画するのを避けるための仕様です。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.