2010-09-20 15 views
5

J'essaie de créer une liste de fichiers arborescente dans une zone richtext.Icône de l'image - problème de transparence

Cela devrait ressembler à une arborescence d'explorateur. Mon code est capable de redimensionner l'icône, mais la transparence est manquante (fond gris clair au lieu de transparence). Qu'est-ce que j'ai besoin de changer ici? Le format de l'image est-il incorrect? Existe-t-il une meilleure façon d'ajouter une image à une zone de texte enrichie?

// Get file info 
FileInfo f = new FileInfo("myfile.name"); 
// Get icon for fileinfo 
Icon ico = Icon.ExtractAssociatedIcon(f); 
// Convert icon to bitmap 
Bitmap bm = ico.ToBitmap(); 
// create new image with desired size 
Bitmap img = new Bitmap(16,16,PixelFormat.Frmat32bpRgb); 
// Create graphics with desired sized image 
Graphics g = Graphics.FormImage(img); 
// set interpolation mode 
g.InterpolationMode = InterpolationMode.HighQualityBiCubic; 
// draw/resize image 
g.DrawImage(bm, new Rectangle(0,0,16,16), new Rectangle(0, 0, bm.Width, bm,Height), GraphicalUnit.Pixel); 
// Paste to clipboard 
Clipboard.SetImage(bm); 
// Paste in RichtextBox 
rtb.Paste(); 

Exemple:

alt text

Edit:

J'ai compris que l'image est transparente, mais en utilisant Clipboard.SetImage() ne publie pas comme image transparente.

Des idées pourquoi et que puis-je faire pour le réparer? Dois-je passer à un contrôle de boîte de texte différent?

+0

Je ne comprends pas. Pourquoi ne pas utiliser un TreeView? ImageList fait des icônes sans tracas. –

+0

Parce que j'ai besoin de l'imprimer - si j'utilise une arborescence, c'est un problème avec plusieurs pages ... Et j'utilise un imagelist comme cache - ce n'est que la partie avec le problème actuel. –

Répondre

0

Essayez

img.MakeTransparent(); 

après avoir contruct il.

Notez que cela va changer votre PixelFormat à Format32bppArgb.

+0

J'ai déjà essayé ça - pas de changement ... J'ai essayé: img.MakeTransparent (Color.Transparent) aussi ... –

2

J'ai eu de la chance en passant par Graphics.

Bitmap b = new Bitmap(pbAssetLoaded.Width, pbAssetLoaded.Height); 
using (Graphics g = Graphics.FromImage(b)) 
{ 
    g.DrawIcon(SystemIcons.Information, 0, 0); 
} 

Ceci dessine l'icône avec transparence sur le bitmap.

+0

J'ai compris que l'image est transparente, mais en utilisant Clipboard.SetImage() doesn ne le publie pas comme image transparente. –

+1

Ne fonctionnait pas pour moi, obtenant toujours un fond noir – Prat