2009-09-26 10 views
2

J'ai besoin d'avoir une image semi-transparente (en utilisant alpha blending) dessiné sur une forme entièrement transparente - cela signifie que l'image sera dessinée sur la forme du contenu transparent.image semi-transparente sur la forme transparente

Actuellement, l'image est toujours dessinée sur la couleur de fond de la fenêtre même si la fenêtre elle-même est transparente.

Ceci est l'état actuel, merci pour toute aide.

public Form1() 
{ 
    InitializeComponent(); 

    SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); 

    MakeTransparent(); 
} 

private void MakeTransparent() 
{ 
    NativeMethods.SetLayeredWindowAttributes(Handle, COLORREF.FromColor(BackColor), 255, Constants.ULW_ALPHA | Constants.ULW_COLORKEY); 
} 

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.Style |= (Constants.WS_EX_LAYERED | Constants.WS_EX_TOOLWINDOW); 
     return cp; 
    } 
} 

private void OnPaint(object sender, PaintEventArgs e) 
{ 
    using (Bitmap bitmap = new Bitmap("c:\\semi-transparent.png")) 
    { 
     e.Graphics.DrawImage(bitmap, 0, 0); 
    } 
} 
+0

Essayez de désactiver le double tampon. – Ruud

Répondre

1

Je suppose qu'un formulaire ne prenant pas en charge une couleur d'arrière-plan transparente, cela peut être impossible. De cette façon, l'arrière-plan du formulaire aura toujours une couleur, même lorsque vous dessinez une image avec un canal alpha.

Voici une question similaire:

1

Eh bien, merci pour la réponse.

En fait, j'étais capable de le faire en utilisant la fonction UpdateLayeredWindow, mais je devais toujours mettre à jour toute la fenêtre bitmap même si j'avais vraiment besoin de redessiner juste une petite partie de la fenêtre.

Capturer le contenu de l'écran et le dessiner sous l'image n'est pas vraiment une solution car j'ai besoin que ma fenêtre soit mobile.

+0

Je suis tombé sur http://www.codeproject.com/KB/GDI-plus/LovelyGoldFishDeskPet.aspx récemment. Et lutté pour trouver cette question à nouveau. :-) – Joey

Questions connexes