C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 四角形で内側・外側の設定


(過去ログ 172 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■99231 / inTopicNo.1)  四角形で内側・外側の設定
  
□投稿者/ パワー (1回)-(2022/02/22(Tue) 19:40:39)

分類:[.NET 全般] 

VB.NETを使用しております。

DrawRectangleにて太さが10ptの四角形を描画したいのですが
普通に使用すると、
引数として渡したRectangleの座標を中心として四角形となります。
これを座標の内側あるいは外側に接する四角形にしたいのですが、
そのような設定はありますか?

イラレだと、中央、外側、内側と設定で決められるのですが
VBやC#でもこのようなことは可能でしょうか?
単に線幅の半分だけ座標をずらせば良いのは分かるのですが
線幅を奇数の場合には1ピクセルだけずれる恐れがあるので、
自動でそういう機能はないかとご質問させていただきました





引用返信 編集キー/
■99232 / inTopicNo.2)  Re[1]: 四角形で内側・外側の設定
□投稿者/ 魔界の仮面弁士 (3296回)-(2022/02/22(Tue) 20:07:42)
No99231 (パワー さん) に返信
> 座標の内側あるいは外側に接する四角形にしたいのですが、
> そのような設定はありますか?

Pen の Alignment プロパティで、Center (既定値) と Inset (内側に描画)を切り替えられます。

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.pen.alignment?view=netframework-4.8

ただし上記にもあるように、Alignment プロパティの他 3 種の設定(Left, Right, Outset)は Center 指定と同義です。



Public Class Form1
  Private ThickPen As Pen
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ThickPen = New Pen(Brushes.Magenta, 10.0F)
    ComboBox1.DataSource = System.Enum.GetValues(GetType(System.Drawing.Drawing2D.PenAlignment))
  End Sub
  Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
    ThickPen.Dispose()
  End Sub
  Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    ThickPen.Alignment = DirectCast(ComboBox1.SelectedItem, System.Drawing.Drawing2D.PenAlignment)
    PictureBox1.Invalidate()
  End Sub

  Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    e.Graphics.DrawRectangle(ThickPen, 20, 20, 180, 180)
    e.Graphics.DrawRectangle(Pens.Blue, 20, 20, 180, 180)
  End Sub
End Class
引用返信 編集キー/
■99233 / inTopicNo.3)  Re[2]: 四角形で内側・外側の設定
□投稿者/ パワー (2回)-(2022/02/22(Tue) 22:57:03)
ありがとうございます。

Insetのは使えると思います
Outsetの方も使いたいのですが、
これは自分座標を計算して描画するしかないということですか?

引用返信 編集キー/
■99234 / inTopicNo.4)  Re[3]: 四角形で内側・外側の設定
□投稿者/ Azulean (1230回)-(2022/02/23(Wed) 07:47:34)
No99233 (パワー さん) に返信
> これは自分座標を計算して描画するしかないということですか?

そうなります。
Rectangle には Inflate という中心を維持して拡縮するメソッドがありますので、それを使えばそこまで大変ではないかと思います。

https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.rectangle.inflate
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.graphics.drawrectangle

1. 元の座標・サイズで Rectangle を作る
2. 中心ならそのまま、内側なら Inflate(-1, -1)、外側なら Inflate(1, 1) とする。 (拡縮する幅が 1px の場合)
3. その Rectangle を DrawRectangle に渡す
引用返信 編集キー/
■99242 / inTopicNo.5)  Re[4]: 四角形で内側・外側の設定
□投稿者/ パワー (3回)-(2022/02/25(Fri) 13:21:33)
Inflateでいけました。
どうもありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -