2012-11-13 4 views
3

J'ai un System.Drawing.Bitmap dans mon code.Dessine une bordure autour d'un bitmap

La largeur est fixe, la hauteur varie. Ce que je veux faire, est d'ajouter une bordure blanche autour de l'image bitmap, avec environ 20 pixels, à tous les 4 bords.

Comment cela fonctionnerait-il?

+0

I pensé à créer un objet graphique à la largeur et la hauteur 40 px 40 px du bitmap (20 pour chaque côté). Je mets un fond blanc et j'ajoute le bitmap au milieu, mais je n'arrive pas vraiment à savoir comment faire ... – Karl

+0

Et ... tu as essayé ça? Ou au moins commencé à coder quelque chose à ce sujet? – LightStriker

Répondre

5

Vous pouvez dessiner un rectangle derrière le bitmap. La largeur du rectangle serait (Bitmap.Width + BorderWidth * 2), et la position serait (Bitmap.Position - new Point (BorderWidth, BorderWidth)). Ou du moins c'est comme ça que je m'y prendrais.

EDIT: Voici quelques code source expliquant comment mettre en œuvre (si vous deviez avoir une méthode spécifique pour dessiner une image):

private void DrawBitmapWithBorder(Bitmap bmp, Point pos, Graphics g) { 
    const int borderSize = 20; 

    using (Brush border = new SolidBrush(Color.White /* Change it to whichever color you want. */)) { 
     g.FillRectangle(border, pos.X - borderSize, pos.Y - borderSize, 
      bmp.Width + borderSize, bmp.Height + borderSize); 
    } 

    g.DrawImage(bmp, pos); 
} 
+2

+1. C'est comme ça que je le ferais, mais l'OP pourrait avoir besoin de code pour boucler la réponse. – jp2code

3

Vous pouvez utiliser la méthode de « SetPixel » d'un Bitmap class, pour définir les pixels nécessaires avec la couleur. Mais plus commode est d'utiliser 'Graphics' classe, comme indiqué ci-dessous:

  bmp = new Bitmap(FileName); 
      //bmp = new Bitmap(bmp, new System.Drawing.Size(40, 40)); 

      System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); 

      gr.DrawLine(new Pen(Brushes.White, 20), new Point(0, 0), new Point(0, 40)); 
      gr.DrawLine(new Pen(Brushes.White, 20), new Point(0, 0), new Point(40, 0)); 
      gr.DrawLine(new Pen(Brushes.White, 20), new Point(0, 40), new Point(40, 40)); 
      gr.DrawLine(new Pen(Brushes.White, 20), new Point(40, 0), new Point(40, 40)); 
+0

Cependant, cette méthode est destructive pour le bitmap, et ne fonctionne que pour les bordures d'encart (bien que je l'accorde, ma méthode ne fonctionne que pour les bordures de début). – antonijn

+0

Oui, vous avez raison. Je n'ai pas pensé à bitmap –

Questions connexes