2010-09-29 78 views
2

我想將矩形的大小增加10個像素。以下代碼似乎不起作用。假設sampleRect是我的矩形。請告訴我。如何增加矩形的大小

Rectangle temp = new Rectangle(
    sampleRect.X - 10, 
    sampleRect.Y - 10, 
    sampleRect.Width + 2*10, 
    sampleRect.Height + 2*10); 
+8

「將下面的代碼作品」你是認真的?嘗試一下,找出答案! – 2010-09-29 20:17:15

+2

它不會工作,它太大了。 – 2010-09-29 20:19:59

+1

你是什麼意思「增加10個像素的大小」?你是否1)想要增加每個邊10個像素2)你想增加10個像素的面積?另外,您是否希望舊的矩形保留在其居中的位置,還是希望它橫向增長? – rein 2010-09-29 20:22:02

回答

11

它將工作,但你可以更優雅的使用寫一樣的東西Inflate method

rect.Inflate(10, 10); 

你的方法和Inflate方法之間的一個重要區別是,創建一個新的矩形例如,當Inflate修改現有的矩形。

+2

矩形是一種值類型;對它的更改不會影響到其他人,因爲它們(必然)會是副本。 – 2010-09-29 20:22:52

+1

@Ron如果它是一個值類型無關緊要;它不是不可改變的 – 2010-09-29 20:29:20

+0

@Josh:這不是不可變性的情況;它是一個參考與價值分類的案例。 「膨脹」改變了他現有的「矩形」,但沒有其他代碼可以保存對它的引用,所以它們將始終保持舊值,除非它們重新讀取它。在Tomas的回答中,有人建議代碼保存對現有矩形的引用會自動看到變異值。 – 2010-09-29 21:18:46

1

我不知道爲什麼你會問「這項工作」 - 試試吧!

然而,

someRectangle.Inflate(10,20); 
//or 
someRectangle.Inflate(10); 

應該工作

+0

我不認爲有任何Inflate()方法需要一個參數,就像你的第二個例子。 – RenniePet 2014-03-09 09:37:26

0

你將在x的新矩形的代碼,Y -10相比sampleRect。爲了彌補你用20來增加寬度和高度。

我假設你試圖增加中心周圍的矩形,在這種情況下,你需要移動矩形的一半新的增加。

例子:

var sizeIncrease = 10; 
var newX = sampleRect.X - 0.5 * sizeIncrease; 
var newY = sampleRect.Y - 0.5 * sizeIncrease; 
var newWidth = sampleRect.Width + sizeIncrease; 
var newHeight = sampleRect.Height + sizeIncrease; 

這些值應該給你你在找什麼

Rectangle.Inflate也將改變圍繞中心規模。

1

根據您的「10個像素成長」的定義,這裏是我會做什麼:

int size = 10; 
int halfSize = size/2; 
Rectangle temp = new Rectangle(
    sampleRect.X - halfSize, 
    sampleRect.Y - halfSize, 
    sampleRect.Width + size, 
    sampleRect.Height + size);