トップページ > 記事閲覧
DrawBoxの座標について
名前:gmo 日時: 2018/01/17 20:45

お世話になってます。今回はほぼ気持ちの問題かもしれませんが・・・よろしくお願いします。 DrawBoxについて、右下座標はそれぞれ-1する必要があるとリファレンスには記載されておりますが、 自分の環境ですと、-1せずに指定したほうが、描画の整合性があるように感じます。 環境のせいと片付ければいいのですが、なんとなくモヤモヤした気持ちで-1をしてます。 というのも、作成してるStringInputもどきの話になりますが、カーソルや下線を縁付きのフォントと 同じような表示にできないかなと思い、また、(AAをつかわず)矩形の枠線の線幅が変更可能なDrawBox みたいなのがほしいといった理由で、とりあえず双方の下準備と実験としてピクセル(ドット?)の計算が(なんとなく) やりやすそうなDrawBoxを使って実線を引いてみようと安易に考え、水平線を描画するだけの関数をつくりました。 //水平線を描画 StartPoint:開始座標 Length:線の長さ Width:線の幅 int DrawHLine(POINT StartPoint, int Length, int Width, unsigned int Color) { return DrawBox(StartPoint.x, StartPoint.y, StartPoint.x + Length - 1, StartPoint.y + Width - 1, Color, TRUE); } ですがWidthに1(1マイナスされるので0)を設定した場合は描画されず、0(1マイナスされるので-1)を設定すると 描画されるという結果になり、0を設定したほうは-1となって裏返って描画されるのは理解出来るとしても、 モヤモヤする感じになってます。 そこで質問なのですが、右下座標からマイナス1するやり方である場合、 例えばDrawBox(0,0,0,0,色,フラグ)で点が描画され、DrawBox(0,0,100,0,色,フラグ)で水平線が引かれると 自分は解釈してるのですが、環境といったことは別としてこういう理解で合っていますでしょうか。 また踏み込んだお願いをしてしまいますが、自分の開発環境が他とは違うとしたら、その点をはっきり認識したいので、 簡単な検証プログラムを組んだので実行していただき、結果を教えていただきたいのですが・・ プログラムソースはこの掲示板に、当方の実行結果は画像でメールかアップローダーどちらかで 提示しようと思ってます。
メンテ

Page: 1 |

Re: DrawBoxの座標について ( No.1 )
名前:管理人 日時:2018/01/18 00:27

> DrawBoxについて、右下座標はそれぞれ-1する必要があるとリファレンスには記載されておりますが、 いえ、それは誤解です、正しくは「右下座標はx,yがそれぞれ-1される」となります 例えば DrawBox( 0, 0, 2, 2, GetColor( 255,255,255 ), TRUE ) ; と記述した場合、塗りつぶされるピクセルは x=0 y=0 x=1 y=0 x=0 y=1 x=1 y=1 の4ピクセルとなります、つまり座標としては (0,0)〜(1,1) の範囲が塗りつぶされます ( x=2 y=2 をそれぞれ -1 した値 x=1 y=1 の範囲が塗りつぶされる ) > そこで質問なのですが、右下座標からマイナス1するやり方である場合、 > 例えばDrawBox(0,0,0,0,色,フラグ)で点が描画され、DrawBox(0,0,100,0,色,フラグ)で水平線が引かれると > 自分は解釈してるのですが、環境といったことは別としてこういう理解で合っていますでしょうか。 いえ、合っていません DrawBox(0,0,0,0,色,フラグ) では何も描画されないので、1ピクセルを描画する場合は DrawBox(0,0,1,1,色,フラグ) とする必要があります DrawBox(0,0,100,0,色,フラグ) でも何も描画されないので、高さ1の水平線を引くには DrawBox(0,0,100,1,色,フラグ) とする必要があります
メンテ
Re: DrawBoxの座標について ( No.2 )
名前:gmo(解決) 日時:2018/01/20 00:04

管理人さんありがとうございます。 線を引く、四角形を書くなどの図形描画系の座標の扱いについて認識が不十分でした。 というより、コンピュータ的な座標の考え方(座標がドットやピクセルといった単位を含む)と普通の(?)座標の考え方の どちらに軸足置くかというところで、文章読み違えた上にライブラリで採用しなかったほうの説明に影響されてたみたいです・・ 言い訳しますと、座標が描画単位を抱えてる考え方が前提だと分かってなかったため、座標から1マイナスするから1プラスしろという話が、 いまいちわからず、注意文で変な理解してなぜか -1しなきゃということになってしまったようです・・ 私にとっては素直に座標設定してよかったんですね・・・ 掲示板のどこかで矩形描画が「グラフィックカードによって1ピクセルほどの差が出る」と書かれてるを目にして、 ウチの環境もそうなのかな?とよく読んだら、どうも内容が浮動小数点計算の精度の影響の話ぽいなと感じ、当てはまるのかもしれないけど、 どうも違う気がする、じゃあこの微妙にずれる現象は何だろう? というところでもやもやした感じになってました。 いろいろ自分の悪いところが露呈してかなり恥ずかしいですが、聞いてよかったです。 ありがとうございました。
メンテ
Re: DrawBoxの座標について ( No.3 )
名前:gmo 日時:2018/01/23 21:32

すみません、追加で質問させていただきます。 DrawBox(5, 6, 5, 6, 色,フラグ)、DrawBox(5, 6, 25, 6, 色,フラグ)DrawBox(5, 6, 5, 26, 色,フラグ)のように面積を持たないような 座標設定の場合、フラグ(FillFlag)にて「塗りつぶさない」(FALSE)場合は枠線が描画(点、線が描画される)で、「塗りつぶす」(TRUE)の場合は 何も描画しない、というのを自プログラムの修正中に見つけましたが、これはDrawBoxの仕様ということで良いでしょうか。
メンテ
Re: DrawBoxの座標について ( No.4 )
名前:管理人 日時:2018/01/24 00:33

はい、あまり考えたことがありませんでしたが、仕様としたいと思います ( 面積0の「中身を塗りつぶす矩形」を描画したいシチュエーションは少なそうですが、  面積0の「枠線だけの矩形」を描画したいシチュエーションはそこそこありそうなので・・・ )
メンテ
Re: DrawBoxの座標について ( No.5 )
名前:gmo(解決) 日時:2018/01/25 20:31

ご回答ありがとうございます。 ピクセル単位で矩形を調整するときは気を付けようと思います。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存