2017-06-12 2 views
0

Hey donc j'utilise actuellement ce post pour créer des rectangles sur une toile et je me promenais comment je pourrais faire le rectangle dessiné 2px plus grand que le rectangle réel enregistré. Est-ce possible et si oui, comment pourrais-je faire cela a été d'essayer de le résoudre pendant un certain temps maintenant serait vraiment utile pour avoir enfin une solution.Comment faire un rectangle de dessin 2px plus grand de chaque côté que le rectangle enregistré. C#

Point startPos;  // mouse-down position 
Point currentPos; // current mouse position 
bool drawing;  // busy drawing 
List<Rectangle> rectangles = new List<Rectangle>(); // previous rectangles 

private Rectangle getRectangle() { 
    return new Rectangle(
     Math.Min(startPos.X, currentPos.X), 
     Math.Min(startPos.Y, currentPos.Y), 
     Math.Abs(startPos.X - currentPos.X), 
     Math.Abs(startPos.Y - currentPos.Y)); 
} 

private void canevas_MouseDown(object sender, MouseEventArgs e) { 
    currentPos = startPos = e.Location; 
    drawing = true; 
} 

private void canevas_MouseMove(object sender, MouseEventArgs e) { 
    currentPos = e.Location; 
    if (drawing) canevas.Invalidate(); 
} 

private void canevas_MouseUp(object sender, MouseEventArgs e) { 
    if (drawing) { 
     drawing = false; 
     var rc = getRectangle(); 
     if (rc.Width > 0 && rc.Height > 0) rectangles.Add(rc); 
     canevas.Invalidate(); 
    } 
} 

private void canevas_Paint(object sender, PaintEventArgs e) { 
    if (rectangles.Count > 0) e.Graphics.DrawRectangles(Pens.Black, rectangles.ToArray()); 
    if (drawing) e.Graphics.DrawRectangle(Pens.Red, getRectangle()); 
} 

juste pour référence ce code est venu de ce poste

https://stackoverflow.com/questions/4060446/how-to-draw-rectangle-on-mousedown-move-c-sharp 

Répondre

1

Dans la méthode getRectangle vous avez juste besoin de changer les valeurs que vous utilisez dans le constructeur pour la Rectangle. Puisque le troisième se réfère à la propriété width, vous ajoutez le nombre de pixels à Math.Abs(startPos.X - currentPos.X). Après cela, le contrôle if (rc.Width > 0) est inutile pour des raisons évidentes.