2010-09-29 18 views
2

Je veux augmenter la taille de mon rectangle de 10 pixels. Le code suivant ne semble pas fonctionner. Supposons que sampleRect est mon rectangle. S'il vous plaît, faites-moi savoir.Comment augmenter la taille d'un rectangle

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

« fonctionnera le code suivant » Êtes-vous sérieux? Essayez-le vous-même et découvrez-le! –

+2

Ça ne marchera pas, c'est trop gros. –

+1

Que voulez-vous dire "augmenter la taille de 10 pixels"? Avez-vous 1) Voulez-vous augmenter chaque côté de 10 pixels 2) Voulez-vous augmenter la zone de 10 pixels? Aussi, voulez-vous que l'ancien rectangle reste là où il est centré ou voulez-vous qu'il se développe latéralement? – rein

Répondre

11

Il fonctionnera, mais vous pouvez écrire la même chose plus en utilisant avec élégance le Inflate method:

rect.Inflate(10, 10); 

Une différence importante entre votre approche et Inflate méthode est que vous créez une nouvelle instance de rectangle, tandis que Inflate modifie un rectangle existant.

+2

Rectangle est un type de valeur; les changements à cela n'affecteront pas les autres car ils seront (nécessairement) des copies. –

+1

@Ron Peu importe si c'est un type de valeur; ce n'est pas immuable –

+0

@Josh: Ce n'est pas un cas d'immuabilité; c'est un cas de référence par rapport à un typage de valeur. 'Inflate' mute son' Rectangle' existant mais aucun autre code ne peut contenir de référence, donc ils garderont toujours l'ancienne valeur à moins qu'ils ne la relisent. Dans la réponse de Tomas, il a été suggéré que le code contenant des références au rectangle existant verrait automatiquement la valeur mutée. –

1

Je ne sais pas pourquoi vous demanderiez "ce travail" - essayez-le!

Cependant,

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

devrait fonctionner

+0

Je ne pense pas qu'il existe une méthode Inflate() qui prend un seul argument comme dans votre second exemple. – RenniePet

0

Le code que vous avez fera un nouveau rectangle en x, y -10 par rapport à la sampleRect. Pour vous dédommager d'augmenter la largeur et la hauteur avec 20

Je suppose que vous essayez d'augmenter le rectangle autour du centre, dans ce cas, vous devez déplacer la moitié du rectangle de la nouvelle augmentation.

Exemple:

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; 

Ces valeurs devraient vous donner ce que vous cherchez

Rectangle.Inflate va aussi changer la taille autour du centre.

1

En fonction de votre définition de « croître de 10 pixels », voici ce que je ferais:

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