- 締切済み
同じ長方形を連続してが描けません。
Microsoft visual basic 6.0 を使って図形を描いているのですが、タイトル通り同じ大きさの長方形が描けません。 フォームにPictureBoxを貼り付けフォームをロードすると一定間隔の塗りつぶした長方形をPictureBox全体に描くようにプログラムを作っています。 プログラムソースは以下の通り簡単なものです。 Private Sub Form_Load() Picture1.Scale (0, 1000)-(1000, 0) For i = 1 To 100 Picture1.Line (0, (i - 1) * 10)-(1000, (i - 1) * 10 + 3), 0, BF Next i End Sub Private Sub Command1_Click() End End Sub このようにして実行すると実際現れる長方形は、高さがバラバラな長方形が描かれます。 これはどうしてでしょうか? また、高さが一定な長方形を連続して描く場合はどうしたらよいのでしょうか? PCのOSは、WindowsXP HomeEdition です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hofuhofu
- ベストアンサー率70% (336/476)
VBが無いので確認できませんが、整数に丸められた時の誤差じゃないですか? (0, 1000)-(1000, 0)の座標系で4ピクセル分の高さの長方形を描いているようですが、実際表示されるときにはPicture1の画面での座標系(Width, Height)に合わせて拡大・縮小されるわけで、その時小数部が丸められたせいで、1ドット分の誤差が出ているのだと思います。 VBがアンチエイリアスをしてくれていれば問題無いわけですが。 Picture1.Line (0, (i - 1) * 10)-(1000, (i - 1) * 10 + int(3 * Picture1.Height / 1000) * 1000 / Picture1.Height), 0, BF ぐらいでできないですかね。
- primary5869
- ベストアンサー率27% (9/33)
Picture1.Line (0, (i - 1) * 10)-(1000, (i - 1) * 10 + 3), 0, BF Picture1.Line (0, (i - 1) * 10)-(1000, (i - 1) * 10 ), 0, BF 「+ 3」を削除すれば、斜めになることはないですが。
補足
回答されている通りただ線を引くだけであるのならば「+3」を消せばいいだけです。ただ、ここでの質問は、線が斜めになることではなく、「同じ長方形を描くようにプログラムを組んでいるけど実行すると同じ長方形は描けない。これはどうして?」ということです。 しかし、Pictureのscaleいっぱいに長方形を描くのであれば、[drawwidth]を指定して水平な線を描くと確かに長方形を描けますが、この場合詳細な長方形の高さの指定は、できないこともないですが、かなり面倒になります。 そして、もしこれがPictureのscaleいっぱいに描かないのであれば、そのLineの端は丸みを帯びたものになり使えません。 また、この質問に載せているソース以外にPictureの[Fillstyle]を指定し、閉じたLineを描いて長方形を描いてみても結果は同じく、高さのばらばらな長方形が描かれるだけでした。