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 Discussion :

bitmap transparent avec mask


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut bitmap transparent avec mask
    Bonjour,

    Je cherche à dessiner un bitmap dans dc avec transparence selon le mask "hbmpBlend"

    ca marche pas;

    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
    28
    void CtransparentDlg::DrawDIG(CDC *dc,int x,int y,void *sample)
    {
    	PDIG dh=(PDIG)sample;
    	CDC globaldcmem;
    	HBITMAP hBmpGlobal=CreateBitmap(32,32,1,32,NULL);
    	
    	globaldcmem.CreateCompatibleDC(dc);
    	SelectObject(globaldcmem.m_hDC,hBmpGlobal);
    	CDC dcmem;
    	dcmem.CreateCompatibleDC(dc);
    
    	dcmem.SetBkColor(0);
    	dcmem.SetBkMode(  TRANSPARENT );
    	SelectObject(dcmem.m_hDC,dh->hBmpBlend);
    	globaldcmem.BitBlt(0,0,32,32,&dcmem,0,0,SRCINVERT);
    	dcmem.SetBkColor(0);
    	dcmem.SetBkMode(  TRANSPARENT );
    	//dc->dcmemSetBkColor(0);
    	SelectObject(dcmem.m_hDC,dh->hBmp);
    	globaldcmem.BitBlt(0,0,32,32,&dcmem,0,0,SRCPAINT);
    	dcmem.DeleteDC();
    	globaldcmem.SetBkColor(0);
    	globaldcmem.SetBkMode( TRANSPARENT );
    	dc->BitBlt(x,y,32,32,&globaldcmem,0,0,SRCCOPY);
    	DeleteObject(hBmpGlobal);
    	globaldcmem.DeleteDC();
    
    }
    pouvez-vous m'aider ?
    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    BitBlt est une copie bit-à-bit et écrasera de toute façon la destination.
    C'est avant cela qu'il faut mélanger les couleurs de l'image et de destination en prenant en compte le multiplicateur hBmpBlend.

    Sur un fond opaque, la formule (par composante) est ainsi:
    (Image *alpha) +(Fond *(1 -alpha))

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    J'ai resolu mon probléme.

    Cependant j'ai besoin d'un conseil :
    Je suis entrain de faire un jeux en 2D , qui affiche une carte et des bonshommes et véhicules en vue de dessus et par dessus avec transparence, bref.

    Pour afficher les bonshommes et/ou véhicules j'ai besoin de la transparence,
    ca marche sur une maquette à moi.
    Question pour afficher un bitmap avec transparence :
    Est-ce plus rapide de manipuler directement le buffer du bitmap créer par CreateDibSection ou en utilisant le BitBlt (avec SRCAND et SRCPAINT) pour le dessin de carte et des bonhommes ?
    Je ne sais pas.

    Autre Question : l'API BitBlt utilise t'il l'accélération 2D ?

    J'ai un soucis divers :
    Quand je passe la valeur bitcount= 32 ou 1 dans CreateBitmap , il se créer s'affiche correctement ,par contre quand je lui passe la valeur BitCount=24 , il se créer , mais inaffichable (ne s'affiche pas).
    Est ce normal ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Si tu veux de la transparence, oublie BitBlt. Ça va pour un truc simple en faisant la conversion pixel par pixel, mais sans plus. En GDI, il y a AlphaBlend.

    Mais GDI est obsolète depuis l'arrivée de... XP (même si toujours largement utilisé).
    Sous XP, on privilégiera GDI+ (sans accélération matériel) et Direct2D depuis Vista (avec accélération).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    Mais quelle différence faites - vous entre GDI et GDI+ ?
    Le GDI+ est t'elle plus rapide par rapport au GDI ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Ben les plus flagrantes sont justement la gestion du canal alpha (alphablending) et l'antialiasing
    Mais il y a aussi les transformations (rotation, échelle, etc.), y compris sur des régions. Les dégradés par chemin, etc.
    Et une non-négligeable est la gestion native des formats png, jpeg, tiff....

    On peut très bien tout faire en GDI, mais là où il faut plusieurs opérations (à grand renfort de calculs complexes), une seule est nécessaire en GDI+.
    Maintenant, il est tout à fait possible de mixer GDI et GDI+.

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

Discussions similaires

  1. Transparence avec Bitmap
    Par Chamadaire dans le forum Android
    Réponses: 1
    Dernier message: 12/03/2012, 17h33
  2. pas de transparence avec mon bitmap
    Par franckMenant dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2010, 15h38
  3. Texte en transparence avec TextOut
    Par TigreRouge dans le forum MFC
    Réponses: 2
    Dernier message: 06/06/2005, 22h57
  4. Bouton avec bitmap transparent
    Par eag35 dans le forum MFC
    Réponses: 2
    Dernier message: 14/09/2004, 16h15
  5. probleme de transparence avec fog
    Par Daedar dans le forum OpenGL
    Réponses: 10
    Dernier message: 03/05/2004, 08h14

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