2014-10-05 42 views
2

非常簡單的代碼更大這裏...只是畫什麼應該是在OnPaint常規64×64的矩形爲FormSystem.Drawing.Graphics.DrawRectangle繪製矩形1px的非指定

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    e.Graphics.DrawRectangle(Pens.Black, new Rectangle(32, 32, 64, 64)); 
} 

我採取了以下屏幕截圖,並測量了65x65的平方。

enter image description here

只是想知道是什麼原因導致了額外的1px的寬度/高度,以及如何解決?

編輯...

我知道我可以使用Rectangle.Inflate(-1, -1)修復...更重要的是,我想知道爲什麼GDI/GDI +呈現矩形1px的寬/高比規定的,在這請給出使用Inflate修復程序的原因。

+0

你如何衡量? – Steve 2014-10-05 09:26:58

+0

@Steve在Windows Paint中,使用選擇矩形,以便選擇矩形恰好適合矩形。 – series0ne 2014-10-05 09:31:34

+0

我認爲是什麼導致額外的寬度是筆的寬度,我相信是添加到您在矩形中給出的尺寸。 – 2014-10-05 09:40:31

回答

2

每個邊框邊緣的中心被繪製到矩形實際邊緣的左邊或下邊。對於單像素邊框,頂邊和底邊繪製在矩形實際邊緣的下方。如果在窗體頂部繪製這樣的矩形,那麼該矩形的頂部爲0,頂部邊緣繪製在0像素和1像素之間的空間中。如果該矩形的高度爲64像素,則底部爲64,底部邊緣爲64像素至65像素。如果將筆的厚度設置爲2,則會發現底邊的另一半繪製在63和64像素之間。垂直邊緣同樣,即對於第一個奇數像素向右繪製,而對於偶數向左繪製。

+0

或者更簡單一些:矩形的寬度是從筆的寬度中間開始測量的。 – TaW 2014-10-05 10:23:46

+0

@TaW,簡單性被高估。 ;-) – jmcilhinney 2014-10-05 10:26:15