2009-05-16 5 views
4

est-il un moyen, pour rendre une image transparente dans CF2.0? Je dois placer une petite image sur une zone de texte, mais elle doit être transparente pour que l'utilisateur puisse voir le texte quand même. Avez-vous une idée?Comment faire une image transparente dans CF 2.0 sans bibliothèques tierces?

Merci beaucoup

twickl

Edit:

Merci pour vos réponses, je vais vérifier ces liens là! Pour compléter mon message, voici ce que j'essaie de faire:

Je veux montrer une petite image (l'image n'existe pas encore et je dois la faire, donc je suis totalement ouvert pour tous les formats) qui est un X à l'extrémité droite d'une zone de texte. En cliquant sur ce X le texte à l'intérieur de la zone de texte sera effacé ... comme sur l'iPhone. Mais je ne peux pas construire mon propre contrôle parce qu'il y a tellement de TextBox qui sont déjà des contrôles personnalisés avec la fenêtre TextBox, qu'il faudra beaucoup de travail et de tests pour les passer tous à des contrôles personnalisés. J'ai donc l'idée de faire un petit panneau, Picturebox, peu importe, qui se trouve au-dessus de la zone de texte. Mais il doit être transparent. Le système d'exploitation est Windows CE 5.0 avec CF 2.0 dessus.

Répondre

3

Je l'ai fait en dérivant une classe de PictureBox et en gérant OnPaint. La clé est l'objet ImageAttributes transmis à DrawImage. Je suppose que le pixel 0,0 est la couleur transparente, mais vous pourriez gérer cela différemment.

public partial class TransparentPictureBox : PictureBox 
{ 
    private Color tColor; 

    public TransparentPictureBox() 
    { 
     InitializeComponent(); 
    } 

    public new Image Image 
    { 
     get { return base.Image; } 
     set 
     { 
      if (value == base.Image) 
       return; 

      if (value != null) 
      { 
       Bitmap bmp = new Bitmap(value); 
       tColor = bmp.GetPixel(0, 0); 
       this.Width = value.Width; 
       this.Height = value.Height; 
      } 
      base.Image = value; 
     } 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.Clear(this.BackColor); 

     if (Image == null) 
      return; 

     ImageAttributes attr = new ImageAttributes(); 

     // Set the transparency color. 
     attr.SetColorKey(tColor, tColor); 

     Rectangle dstRect = new Rectangle(0, 0, base.Image.Width, base.Image.Height); 
     e.Graphics.DrawImage(base.Image, dstRect, 0, 0, base.Image.Width, base.Image.Height, GraphicsUnit.Pixel, attr); 
    } 
} 
8

Selon le type de transparence dont vous avez besoin, vous pouvez choisir une de ces options:

1.) Si vous avez une image avec une partie spécifique qui devrait être tout à fait transparent, vous pouvez utiliser ImageAttributes.SetColorKey() pour définir une seule couleur transparente, puis passez à Graphics.DrawImage. Votre image devra avoir une couleur (par exemple Color.Cyan) qui sera dessinée complètement transparente.

2.) Si vous souhaitez que l'image entière soit partiellement transparente, par ex. Pour un effet de fondu entrant/sortant, vous pouvez appeler la fonction AlphaBlend(), comme démontré here.

3.) Si vous avez une image avec des informations de transparence intégrées, par ex. une image PNG transparente qui doit être rendue sur une variété de couleurs d'arrière-plan, ces méthodes précédentes ne fonctionneront pas et vous devez utiliser l'interface basée sur COM IImage. L'interopérabilité COM de .NETCF est documentée sur this page (recherchez "IImage interface" sur cette page).

L'option 3 est la plus flexible, mais elle implique également le plus d'efforts de mise en œuvre. Si vous continuez avec plus d'informations sur le type d'image que vous voulez dessiner de manière transparente et sur votre plate-forme cible, nous pourrions peut-être vous aider davantage.

Questions connexes