Transparence sur video

Résolu
julacariote Messages postés 5 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 5 octobre 2007 - 18 sept. 2007 à 12:16
julacariote Messages postés 5 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 5 octobre 2007 - 19 sept. 2007 à 13:40
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 sept. 2007 à 18:24
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;
    }
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 sept. 2007 à 16:25
Salut, avec quel composant lis tu la vidéo ? Un gif animé ou un bmp suffirait ?
0
julacariote Messages postés 5 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 5 octobre 2007
18 sept. 2007 à 16:30
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 sept. 2007 à 16:56
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 );
    }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julacariote Messages postés 5 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 5 octobre 2007
19 sept. 2007 à 13:40
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
0
Rejoignez-nous