- ベストアンサー
Windows APIの線などの描画について
RectangleやLineTo関数を使ってて気づいたのですが 線の終点が指定した座標の一歩手前になっているようです 気になってネットで検索したら、終点の座標を指定すると説明しているものがありました。 私の使っている本でもそうなっています。 これはPCの問題なのでしょうか? それとも正確には終点の一歩手前の座標を指定するものなのでしょうか? 後者だとするとなぜそうしてあるのか気になります。 試しに同じ座標から同じ座標に線を引こうとしたら何も表示されませんでした。 私の感覚では点が表示されるのが期待されるのですが・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
LineTo 等で描画する場合、座標の指定には終点の座標を指定するのですが、終点の座標自体は描画に含まれません。 http://msdn.microsoft.com/ja-jp/library/cc410428.aspx PCの問題ではなく仕様となっていますので、どの環境でも同じ結果になります。 なぜこういった仕様にしたのかの理由は分かりませんが、座標ではなく幅として考えるとスッキリするかと思います。 MoveToEx(hdc, x, y, NULL); x += 10; LineTo(hdc, x, y); とした場合、きちんと10ドットの線が引かれます。 これが、もし終点の座標も描画に含まれてしまうような仕様だったら、ロジック上では10ドット描画しているように見えるのに、実際には11ドットの線が引かれてしまうことになってしまい混乱してしまうかもしれません。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
少なくとも Windows3.1 の時代から, 座標はピクセルそのものではなく「ピクセルの境界」についています. 方眼紙を想像してもらえればいいかな.
- a_kwn
- ベストアンサー率34% (8/23)
例えば、 点A:(0,0) - 点B:(10, 0) 点B:(10,0) - 点C:(20, 10) と、2つの直線を連続で描画した場合に、始点、終点共に描画するルールだと、 「点Bを2回書いてしまうこと」 が、R2_XORPEN 等で描画した場合にまずいからではないでしょうか?
お礼
遅くなりました。回答ありがとうございます。
お礼
遅くなりました。回答ありがとうございます。 ピクセル上だと思っていました。