我想將矩形的大小增加10個像素。以下代碼似乎不起作用。假設sampleRect是我的矩形。請告訴我。如何增加矩形的大小
Rectangle temp = new Rectangle(
sampleRect.X - 10,
sampleRect.Y - 10,
sampleRect.Width + 2*10,
sampleRect.Height + 2*10);
我想將矩形的大小增加10個像素。以下代碼似乎不起作用。假設sampleRect是我的矩形。請告訴我。如何增加矩形的大小
Rectangle temp = new Rectangle(
sampleRect.X - 10,
sampleRect.Y - 10,
sampleRect.Width + 2*10,
sampleRect.Height + 2*10);
它將工作,但你可以更優雅的使用寫一樣的東西Inflate
method:
rect.Inflate(10, 10);
你的方法和Inflate
方法之間的一個重要區別是,創建一個新的矩形例如,當Inflate
修改現有的矩形。
矩形是一種值類型;對它的更改不會影響到其他人,因爲它們(必然)會是副本。 – 2010-09-29 20:22:52
@Ron如果它是一個值類型無關緊要;它不是不可改變的 – 2010-09-29 20:29:20
@Josh:這不是不可變性的情況;它是一個參考與價值分類的案例。 「膨脹」改變了他現有的「矩形」,但沒有其他代碼可以保存對它的引用,所以它們將始終保持舊值,除非它們重新讀取它。在Tomas的回答中,有人建議代碼保存對現有矩形的引用會自動看到變異值。 – 2010-09-29 21:18:46
我不知道爲什麼你會問「這項工作」 - 試試吧!
然而,
someRectangle.Inflate(10,20);
//or
someRectangle.Inflate(10);
應該工作
我不認爲有任何Inflate()方法需要一個參數,就像你的第二個例子。 – RenniePet 2014-03-09 09:37:26
你將在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也將改變圍繞中心規模。
根據您的「10個像素成長」的定義,這裏是我會做什麼:
int size = 10;
int halfSize = size/2;
Rectangle temp = new Rectangle(
sampleRect.X - halfSize,
sampleRect.Y - halfSize,
sampleRect.Width + size,
sampleRect.Height + size);
「將下面的代碼作品」你是認真的?嘗試一下,找出答案! – 2010-09-29 20:17:15
它不會工作,它太大了。 – 2010-09-29 20:19:59
你是什麼意思「增加10個像素的大小」?你是否1)想要增加每個邊10個像素2)你想增加10個像素的面積?另外,您是否希望舊的矩形保留在其居中的位置,還是希望它橫向增長? – rein 2010-09-29 20:22:02