Transparence sur video [Résolu]

Signaler
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
5 octobre 2007
-
julacariote
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
5 octobre 2007
-
Bonjour à tous,

J'essaie de développer une application en c# et je me heurte à un problème:
Je fais jouer une video dans un label et j'aimerais avoir sur cette video une image GIF (dans une picturebox par ex) en partie transparente. Je ne précise que je ne veux pas directement incruster mon gif sur la video avec un logiciel de montage car le gif doit changer au cours du programme.
Je n'arrive pas à gérer la transparence sur la video !
Quelqu'un connait-il la solution à ce pb ?

Merci,
Julacariote

5 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
Le contôle apparemment ça ne marchera pas.. la solution de la forme avec un région delimitée est pas mal, c'est plus simple à mettre en place qu'une Layered Window.

internal class MyForm : Form
{
    public MyForm( Bitmap bmp ) : base( )
    {
        // Alt + F4 pour quitter.
        this.ClientSize = bmp.Size;
        this.BackgroundImage = bmp;
        this.FormBorderStyle = FormBorderStyle.None;
        this.TopMost = true;
        this.ShowInTaskbar = false;
        this.Region = MakeRegionFromBitmap( bmp, bmp.GetPixel( 0, 0 ) ); // La couleur de fond.
    }


    // Bitmap sans compression avec une couleur de fond unique !
    // On peut utiliser Bitmap.LockBits pour accélérer le traitement.
    private Region MakeRegionFromBitmap( Bitmap bitmap, Color transparency )
    {
        if ( bitmap == null )
            throw new ArgumentNullException( );


        int width = bitmap.Width;
        int height = bitmap.Height;
        GraphicsPath path = new GraphicsPath( );


        for ( int y = 0; y < height; y++ )
        {
            for ( int x = 0; x < width; x++ )
            {
                if ( bitmap.GetPixel( x, y ) != transparency )
                {
                    path.AddRectangle( new Rectangle( x, y, 1, 1 ) );
                }
            }
        }


        Region region = new Region( path );
        path.Dispose( );
        path = null;


        return region;
    }
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
Salut, avec quel composant lis tu la vidéo ? Un gif animé ou un bmp suffirait ?
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
5 octobre 2007

Bonjour,

J'utilise directX pour lire la video (en format avi) dans un label (ou dans un panel ou une picturebox, le résultat est le même). Pour l'image, peu m'importe son format GIF ou autre du moment qu'il permet la transparence.

Merci
Julacariote
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
Je ne sais pas trop.. faudrait tester plusieurs choses..

- Une forme sans bordure par dessus la vidéo, soit avec une region decoupée ( propriété region ) soit une LayeredWindow .

- Peut être avec ce genre de contrôle comme enfant du control qui contient la vidéo ( mais j'y crois pas trop ) :

public class MyControl : Control
{
    private const int WS_EX_TRANSPARENT = 0x00000020;
    private Bitmap bmp = null;


    public MyControl( ) : base( )
    {
        bmp = Properties.Resources.MyBitmap;
        bmp.MakeTransparent( Color.White ); // La couleur de fond.
        this.Size = bmp.Size;
    }


    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TRANSPARENT;
            return cp;
        }
    }


    protected override void OnPaintBackground( PaintEventArgs e )
    {
        Graphics g = e.Graphics;
        g.DrawImage( bmp, 0, 0, bmp.Width, bmp.Height );
    }
}
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
5 octobre 2007

Bonjour Lutinore,

J'ai essayé ta solution ce matin :  parfaite ! Tout marche nickel ! C'est exactement ce qu'il me fallait.
Je te remercie beaucoup pour ton aide.

Julacariote