午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

VisualBasic2010のFillPolygonで三角形を描くとき気になったこと

10x10ピクセルの領域いっぱいに描画するとこうなる
FillPolygon(緑, 3つの頂点)
頂点を指定するときは0上の頂点は横幅/2だから5になって
右下は10,10になるからはみ出ている
頂点を指定するときは0からが基準になるから?
 
 

f:id:gogowaten:20191014114731p:plain

左下と右下の頂点から1引いてみた
まだ右下が削られている?
 
 

f:id:gogowaten:20191014114747p:plain

更に1ピクセルづつ小さくしてみた
削られてはいなかったみたい
 
 

f:id:gogowaten:20191014114804p:plain

横幅を奇数の9にして
高さ幅から1引いてみた
多分これで正しいんだと思う
 
 

f:id:gogowaten:20191014114821p:plain

アンチエイリアスをやめてみた
なんか縮んだけど形はOK
問題は横幅が偶数のとき
 
 

f:id:gogowaten:20191014114841p:plain

1引くのをやめてみた
左下が1ピクセル足りないというかコレジャナイ感
 
 
まとめ
FillPolygonで図形を描くとき
Bitmapの大きさから-1する
アンチエイリアスをかけないと小さくなる
 

f:id:gogowaten:20191014114900p:plain

上の頂点の時も-1した方がいいのか?
(10-1)/2は整数だと4になっていた
 
 

f:id:gogowaten:20191014114919p:plain

小数点有りで4.5の場合の座標は4になるみたい
 
 
小数点有りにしたら横幅が偶数のときもいい感じになった
 
 
まとめ
頂点の計算もBitmapの横幅から-1してから
アンチエイリアス有りなら頂点の計算は小数点有りがいいし
横幅が偶数のときでも奇数でも期待通りになる
アンチエイリアスなしなら横幅が奇数の時はいいけど
偶数の時はどうやっても微妙
 

f:id:gogowaten:20191014114958p:plain