2009-10-06 7 views
1

Dans une arborescence après l'événement select, je remplis une liste avec des images.
Je veux formater ces images et placer une bordure de couleur noire autour de chaque image.Dessiner une bordure pour l'image dans la vue en liste

private void TreeView1_Select(object sender, EventArgs e) { 
     if (folder != null && System.IO.Directory.Exists(folder)) { 

      DirectoryInfo dir = new DirectoryInfo(@folder); 
      foreach (FileInfo file in dir.GetFiles()) { 
       try { 
        imageList.Images.Add(Image.FromFile(file.FullName)); 
       } catch { 
        Console.WriteLine("This is not an image file"); 
       } 
      } 

      for (int j = 0; j < imageList.Images.Count; j++) { 
       this.ListView1.Items.Add("Item" + j); 
       this.ListView1.Items[j].ImageIndex = j; 
      } 

      this.ListView1.View = View.LargeIcon; 
      this.ListView1.LargeImageList = imageList; 
      this.ListView1.DrawItem += 
       new DrawListViewItemEventHandler(ListView1_DrawItem); 

     } 
    } 

    private void ListView1_DrawItem(object sender, DrawListViewItemEventArgs e) 
    { 

    } 
+0

Hey rockrule, pouvez-vous formater votre code en utilisant le bouton de code dans l'éditeur s'il vous plaît. –

+0

merci Greg, j'ai formaté. – rockrule

+0

@rockrule, en fournissant le code est très bien, mais pourriez-vous s'il vous plaît également formuler une question? que veux-tu faire exactement? –

Répondre

1

Je voudrais ajouter une bordure à l'aide d'un objet Graphics immédiatement après le chargement des images du fichier:

EDIT: a modifié le code, cela fonctionne pour moi ...

private void TreeView1_Select(object sender, EventArgs e) { 
     if (folder != null && System.IO.Directory.Exists(folder)) { 

      DirectoryInfo dir = new DirectoryInfo(@folder); 
      foreach (FileInfo file in dir.GetFiles()) { 

       Image img = new Bitmap(Image.FromFile(file.FullName)); 
       using (Graphics g = Graphics.FromImage(img)){ 
        g.DrawRectangle(Pens.Black, 0, 0, img.Width - 2, img.Height - 2); 
       } 
       imageList.Images.Add(img); 

NOTE: la copie d'image est prévue; si je modifier le code pour

Image img = (Bitmap)Bitmap.FromFile("test.bmp"); 

comme suggéré dans les commentaires, je reçois une exception disant: « Un objet graphique ne peut être créé à partir d'une image qui a un format de pixel indexé. »

+0

salut orsogufu, merci, le code donné n'a aucun effet sur l'image. Dois-je mettre la propriété? .pls aide – rockrule

+0

Je changerais la ligne qui commence 'Image img = ...' 'Bitmap img = (Bitmap) Bitmap.FromFile (fichier.FullName);'. Votre version charge le fichier et en fait une copie Bitmap. – MusiGenesis

+0

@MusiGenesis: merci pour votre commentaire, mais je fais une copie exprès (voir la réponse éditée). Si vous savez comment éviter l'erreur sans faire une copie, s'il vous plaît faites le moi savoir! –