Accueil > Forum > > > > [GDI+] problème d'icones transparents...
[GDI+] problème d'icones transparents...
mercredi 12 octobre 2005 à 08:44:14 |
[GDI+] problème d'icones transparents...

psy4meuh
|
Bonjour à tous,
je suis en train de basculer un de mes anciens programes d'affichage d'icones en GDI+, et je suis face à un problème bizare : Les parties complettement transparentes des icones sont OK, mais les transparences 'partielles' s'affichent en noir... alors que dans l'ancienne vesion (BitBlt...) tout était OK... Pour mieux comprendre, une petite image vaut mieux qu'un grand discours :  Quelqu'un a une idée?
|
|
mercredi 12 octobre 2005 à 13:47:48 |
Re : [GDI+] problème d'icones transparents...

jpthomasset
|
Salut,
C'est pas facile de répondre comme ca : est-ce que tu aurais un bout de
code ? Tu utilise Graphics::DrawImage ? Quel est le format de tes
icones ?
Pour info, perso j'utilise des PNG et je n'ai eu aucun problème avec la composante alpha.
A+,
JP.
PS: l'image ne s'affiche pas...
|
|
mercredi 12 octobre 2005 à 14:32:42 |
Re : [GDI+] problème d'icones transparents...

psy4meuh
|

Voilà mon code pour la version en GDI+.... rien de spécial... cet icône est en 24bpp + alpha
hdc = BeginPaint(_hWnd, &ps); Graphics graphics(hdc); Bitmap bmp2(hIcon); graphics.DrawImage(&bmp2,256,0);
|
|
mercredi 12 octobre 2005 à 15:45:11 |
Re : [GDI+] problème d'icones transparents...

jpthomasset
|
Salut, d'après ce message : [ Lien ]Il semble qu'il y ai un bug dans la fonction FromHICON. Le message contient un correctif en C#, mais ce n'est pas trop dur de le porter. Honnetement, je me demance si cela ne viendrais pas du fait que en GDI classique, pour utiliser l'alpha blending, il fallait prémultiplier les couleurs par l'alpha, alors qu'en GDI+ ce n'est pas le cas. Une idée à creuser, est peut-etre de charger les icones directement depuis le fichier de resource dans GDI+ avec la fonction Image::FromStream, il est possible que dans ce cas tes icones soient extraites normalement : Perso j'utilise cette technique pour mes images, mais ce sont des PNG. A+, JP.
|
|
mercredi 12 octobre 2005 à 16:42:34 |
Re : [GDI+] problème d'icones transparents...

psy4meuh
|
Peut être pas un bug, mais à mon avis le GDI+ ne gère pas le "24bppARGB",je vais essayer de transformer les icones en "32bppARGB"après lecture, mais il faut que je les lisent dirrectement... genre avec le hbmColor de ICONINFO...., j'vais essayer...
|
|
mercredi 12 octobre 2005 à 17:28:26 |
Re : [GDI+] problème d'icones transparents...

jpthomasset
|
Ben, en fait les icones en 24bits plus un layer alpha sont équivalentes
à des images en 32bppARGB. La différence est (il me semble) dans
l'organisation des données (je crois que les icones ont un bitmap qui
contient uniquement les valeurs alpha et un autre pour les couleurs
24bits).
Normalement, GDI+ devrait donc créer un bitmap en 32bpp à partir de ton icone, mais il y a sans doute un bug...
A+,
JP.
|
|
mercredi 12 octobre 2005 à 17:42:37 |
Re : [GDI+] problème d'icones transparents...

jpthomasset
|
Petite correction les icones en 32 bits, contiennent en fait un bitmap
de 1bit qui sert de masque et un bitmap de 32 bits (24 pour les
couleurs et 8 pour l'alpha).
Il est probable que GDI+ utilise le bitmask au lieu de l'alpha.
A+,
JP.
|
|
jeudi 13 octobre 2005 à 08:25:53 |
Re : [GDI+] problème d'icones transparents...

psy4meuh
|
Je crois avaoir trouvé, je poste mon code apres vérif...
|
|
jeudi 13 octobre 2005 à 08:55:48 |
Re : [GDI+] problème d'icones transparents...

psy4meuh
|
Ok, ca marche... c bien ce que je pensait, le GDI+ ne gère pas bien le format de l'icone à cause du masque je pense, donc je prends la parie couleur(+alpha) de l'icone par 'GetIconInfo' et je crée un Bitmap GDI+ au format 32bppARGB... voilà mon code :
/**************************************************************************/
//hIcon loadé par un LoadImage ou ExtractIcon
PICONINFO ii = new ICONINFO;
GetIconInfo(hIcon, ii);
Bitmap bmp(ii->hbmColor, NULL);
DeleteObject(ii->hbmColor);
DeleteObject(ii->hbmMask);
BitmapData bmData;
Rect bmBounds(0,0,bmp.GetWidth(),bmp.GetHeight());
bmp.LockBits(&bmBounds, ImageLockModeRead, bmp.GetPixelFormat(), &bmData);
Bitmap dstBitmap(bmData.Width, bmData.Height, bmData.Stride, PixelFormat32bppARGB, (BYTE *)bmData.Scan0);
BOOL IsAlpha = false;
Color c1(0,0,0,0);
for (int y=0; y <= bmp.GetHeight()-1; y++) {
for (int x=0; x <= bmp.GetWidth()-1; x++) {
dstBitmap.GetPixel(x,y,&c1);
if (c1.GetA()>0 & c1.GetA()<255) IsAlpha=true;
}
}
bmp.UnlockBits(&bmData);
if (IsAlpha) {
graphics.DrawImage(&dstBitmap,0,0,Taille,Taille);
}
else {
Bitmap bmp2(hIcon);
graphics.DrawImage(&bmp2,0,0,Taille,Taille);
delete &bmp2;
}
/**************************************************************************/
Je vérifie au passage que l'icone contient bien de la transparence partielle (0
|
|
jeudi 13 octobre 2005 à 10:02:03 |
Re : [GDI+] problème d'icones transparents...

jpthomasset
|
Salut,
Effectivement, cela vient sans doute de la conversion dans GDI+. Dans
tes boucles for, je te conseille de sortir des boucles dès que IsAlpha
est vrai, ca t'evitera de parcourir tout les pixels si tu trouve une
valeur alpha dans les premiers pixels.
Je pense que tu aurais pu t'en sortir en regardant simplement le nombre
de bits par pixel de ii->hbmColor avec GetObject, a mon avis il doit
donner 32 dans le cas d'un image avec une valeur alpha.
Pour ton problème de fenetre transparente, il me semble que
SetLayeredWindowAttributes ne sert que si l'on veut une fenetre avec
des parties completement transparentes (avec une colorkey) ou alors si
on veut appliquer le même alpha à toute la fenetre (la valeur bAlpha).
Si tu veux une fenetre avec des valeurs alpha par pixel, il faut créer
ta fenetre avec les styles WS_EX_LAYERED et WS_EX_TRANSPARENT et
ensuite utiliser la fonction UpdateLayeredWindow qui fonctionne un peu
comme la fonction AlphaBlend. Je pense aussi qu'avec GDI+ on peut aussi
utiliser DrawImage avec une image en 32bppARGB au lieu de la fonction
UpdateLayeredWindow, mais c'est a vérifier.
A+,
JP.
|
|
Cette discussion est classée dans : problème, icones, gdi, transparents, ok
Répondre à ce message
Sujets en rapport avec ce message
Glade : pixmaps [ par UnderFlow ]
Bonjour à tous, j'utilise Glade pour la création d'un gui. Je rencontre le problème suivant : Lorsque je suis ss Glade, le chargement des icones se p
Problème de mise à jour de ma base de données [ par lam_insat ]
Mon application consiste une application multi-tierd.Le probléme est que les modifications que fait un client ne parviennent pas à un deuxieme que lor
problème imagelist [ par banane_rose ]
salut ! voilà j'ai une image 96 x 16 de 6 icônes avec une profondeur de couleur de 24 . et le code suivant : HIMAGELIST hImgL =
Problème mon prem programe [ par AxeL364 ]
bonjour, je début dans le c++ jessaye d'écrire un ptit programme pour progresser mais malheuresement un obstacle (qui parait très stupide et facile po
Problème OpenGL (GL_POINT) [ par olivier_job ]
Bonjour, J'utilise VC++ 7.0, avec wxWindows. Le problème est le suivant. Sur mon ordinateur, les GL_POINTS apparaissent comme des cercles, alors q
Problème avec GL_POINT affiché en carré [ par olivier_job ]
Bonjour, J'utilise VC++ 7.0, avec wxWindows. Le problème est le suivant. Sur mon ordinateur, les GL_POINTS apparaissent comme des cercles, alo
Borland C++ Builder : problème d'inclusion de fichier [ par vivichou83 ]
Hello tout le monde,J'ai un problème avec Borland.Je m'explique :Je dois réliser un projet et l'exécuter sous un autre pc dépourvu de borland, je déco
Problème d'interfacage d'une DLL écrite en C++ avec vba [ par pierrinot ]
Bonjour, Je dois créer une DLL utilisable par un programme VBA. Je tombe sur un problème d'entête de fonctions. La DLL est bien compilée, mais lorsq
Problème de class [ par norton ]
Bonsoir, j'ai un problème avec ma class. quand je compile ca me donne ce message d'erreur : error C2653: 'CCamera' : is not a class or namespace name
Problème d'installation de composant sous borland CPP builder 5 [ par max_BCB ]
Salut, Je compile mon paquet (là pas de problème!), clique sur "installer" et voilà le messageque j'obtiens : <IMG alt="" hspace=0 src="file://
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : CXIMAGERE : CXIMAGE par rt15
Cliquez pour lire la suite par rt15
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|