IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] custom control à partir d'une image / alpha blending


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut [C#] custom control à partir d'une image / alpha blending
    Salut à tous !!
    J'ai un TP qui consiste à faire un lecteur multimédia, bon jusque là rien de compliqué, alors je me suis dit que j'allais faire un truc un peu plus sympa.. Pour ça j'ai donc voulu refaire le design des controles, qui sont relativement moches d'origine..
    J'ai donc fouillé pas mal sur le net et j'ai fini par créer un nouveau contrôle en surdéfinissant la méthode OnPaint, je vous passe les détails.. Ensuite j'ai créé un joli bouton sous 3ds et j'ai exporté l'image en png (pour conserver le canal alpha)
    J'ai réglé à peu près tout ce qu'il faut, et voilà ça marche pas trop mal.. Mais justement pas assez bien !
    En fait j'ai un petit souci, c'est que quand je fais un aperçu de mon bouton sous windows ou n'importe kel éditeur d'image, il fait l'interpolation nickel avec le canal alpha et la transparence bien comme il faut et c'est superbe, seulement une fois dans le programme c'est pas super joli, bon on voit pas le contour de l'image mais c'est quand même pas super bo.. Enfin je vous mets l'image ça sera plus parlant :

    A gauche on voit le rendu sous windows, qui est nickel tout lissé et tout, et à droite le rendu dans le programme, qui est pas si mal mais mal lissé et avec une espèce de bande noire autour..
    Pour info, voilà ce que j'ai rajouté dans le constructeur du controle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SetStyle(ControlStyles.UserPaint, true);
    SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    SetStyle(ControlStyles.DoubleBuffer, true);
    //Pour activer le double buffering
    SetStyle(ControlStyles.SupportsTransparentBackColor,true);
    //Pour activer la gestion de la transparence
     
    BackColor = Color.Transparent;
    //Pour que ça apparaisse correctement sur le controleur parent
    Et voilà la méthode OnPaint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    {
    cursorYmin = Height/2 - cursorHeight/2;
    cursorYmax = Height/2 + cursorHeight/2;
    //Calcul de la position de l'objet
     
    base.OnPaint(pe);
    //Appel de la méthode de dessin de la base
     
    g = Graphics.FromImage(buffer);
    //on récupère un Graphics temporaire dans buffer qui est un Bitmap
    g.Clear(BackColor);
    //On réinitialise le buffer
     
    ColorMatrix cm = new ColorMatrix();
    ImageAttributes ia = new ImageAttributes();
    ia.SetColorMatrix(cm);
    //Création des attributs pour l'affichage
     
    g.DrawImage(buttonBitmap,
    	new Rectangle(cursorXmin,cursorYmin,cursorWidth,cursorHeight),
    	0,0,buttonBitmap.Width, buttonBitmap.Height, GraphicsUnit.Pixel,ia);
    //Affichage de l'image proprement dite, avec les bons paramètres
     
    pe.Graphics.DrawImage(buffer, 0, 0);
    //Envoi du buffer
    }
    Voilà, si quelqu'un peut m'expliquer pourquoi ça fait cet effet bizarre alors que l'aperçu est nickel, je voudrais bien savoir..
    Merci à tous !!

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Résolution
    Bon en fait j'ai trouvé une autre librairie pour faire le chargement de l'image, et maintenant ça marche nickel.. Au passage, petite pub :
    http://openil.sourceforge.net/
    C'est cette librairie que j'ai utilisée et qui m'a permis de résoudre de façon très simple mon problème, merci à ses concepteurs !

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Au passage petite règle
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Ah désolé j'ai pas trop l'habitude des forums !! Voilà c'est mieux..

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    je crains que ce soit le redimensionnement de l'image qui est très mal géré sous .net ; mais je peux me tromper en ce qui concerne ton cas de figure :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par neguib
    je crains que ce soit le redimensionnement de l'image qui est très mal géré sous .net ; mais je peux me tromper en ce qui concerne ton cas de figure :
    En effet j'avais pensé à ce problème, donc j'ai fait le test en affichant la bitmap dans sa taille originale, d'ailleurs c'est ce cas qui est présenté sur la capture que j'ai faite.. Mais une fois l'autre bibliothèque utilisée je n'ai plus eu aucun problème, que ça soit en taille originale ou en étirant la taille dans n'importe quel sens, le redimensionnement semble fonctionner correctement, contrairement au chargement ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tracer des traits .. (a partir d'une image)
    Par estampille dans le forum Applets
    Réponses: 1
    Dernier message: 08/08/2006, 13h02
  2. Lien internet a partir d'une image
    Par Furlaz dans le forum C++Builder
    Réponses: 28
    Dernier message: 15/06/2006, 13h57
  3. Réponses: 2
    Dernier message: 08/05/2006, 21h27
  4. appel de fonction à partir d'une image activer/desactiver
    Par philippe123 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/08/2005, 16h26
  5. Réponses: 3
    Dernier message: 27/01/2005, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo