Transparence sur video [Résolu]

Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Dernière intervention
5 octobre 2007
- - Dernière réponse : julacariote
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
3
Merci
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;
    }
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
Salut, avec quel composant lis tu la vidéo ? Un gif animé ou un bmp suffirait ?
Commenter la réponse de Lutinore
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Dernière intervention
5 octobre 2007
0
Merci
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
Commenter la réponse de julacariote
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
0
Merci
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 );
    }
}
Commenter la réponse de Lutinore
Messages postés
5
Date d'inscription
mardi 18 septembre 2007
Dernière intervention
5 octobre 2007
0
Merci
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
Commenter la réponse de julacariote

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.