|
| Inicio → WINDEV 2025 → Sauvegarder l'icone associée à un fichier en gardant les informations de transparence |
| Sauvegarder l'icone associée à un fichier en gardant les informations de transparence |
| Iniciado por Sylvain RICAU, 13,feb. 2017 10:29 - 5 respuestas |
| |
| | | |
|
| |
Miembro registrado 88 mensajes |
|
| Publicado el 13,febrero 2017 - 10:29 |
Bonjour,
J'arrive à sauvegarder l'icone associée à un fichier en utilisant le code suivant :
.... SI nTaille=16 ALORS // Petite icône nbIcons = API("SHELL32","ExtractIconExA", sDefaultIcon, nIconIndex, Null, &hIcon, 1) SINON //Icone standard hIcon = API("SHELL32","ExtractIconA", 0, sDefaultIcon, nIconIndex) FIN
SI hIcon DANS (-1,0,1) ALORS Ferme(FEN_Icone) RENVOYER Faux FIN hDC est entier système=0 SI sNomChpImage<>"" ALORS {sNomChpImage,indChamp}..Visible=Faux hDC = dDébutDessin(sNomChpImage) nError = API("USER32","DrawIconEx",hDC, 0, 0, hIcon, nTaille, nTaille, 0, 0, 3) {sNomChpImage,indChamp}..Visible=Vrai SINON nError = API("USER32","DrawIconEx",hDC, 0, 0, hIcon, nTaille, nTaille, 0, 0, 3) FIN dSauveImageBMP(FEN_Icone.IMG_Icone, FichierIcone) ....
Cependant, avec cette méthode je me retrouve avec des icônes avec le fond du champ dans lequel l'icône a été dessinée (sNomChpImage).
A part utiliser un logiciel de dessin pour redéfinir les parties transparentes (tâche fastidieuse et ne pouvant pas être automatisée), quelqu'un aurait il une solution à me proposer ?
Il y a certainement une fonction dans les API Windows pour extraire sous forme de fichier une icône associée à un fichier. Quelqu'un pourrait il me donner des informations sur cette piste ?
Merci d'avance |
| |
| |
| | | |
|
| | |
| |
| Publicado el 13,febrero 2017 - 17:10 |
Bonjour Sylvain,
Pour conserver la couche alpha, tu peux procéder comme ceci:
- sous le champ image dans lequel tu dessines l'icône, place un champ forme de couleur rvb(253,254,255) - à la place de dSauveImageBMP, utilise dSauveImagePNG avec pour couleur de transparence: rvb(253,254,255)
Le résultat est satisfaisant dans la plupart des cas.
Si tu trouves le moyen de faire mieux, ça m'intéresse!
JM |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 962 mensajes |
|
| Publicado el 14,febrero 2017 - 06:55 |
hello, il y a aussi la possibilité d'utiliser la fonction Icon.ExtractAssociatedIcon de l'assemblage dotnet System.Drawing. Pour l'utiliser dans windev : 1 - Inclure les assemblages System et System.Drawing dans son projet ( Atelier/.NET/Utiliser un assemblage dans son projet) 2 - Voici un exemple de code pour extraire l'icone d'un exe et la sauvegarder dans un fichier png :
ExeAvecIcone est une chaîne = "F:\WinDev 16\Programmes\windev16.exe" MonIcone est une System.Drawing.Icon dynamique = Icon.ExtractAssociatedIcon(ExeAvecIcone) SI MonIcone <> Null ALORS MaStream est un System.IO.FileStream("f:\temp\MonIcone2.png",FileMode.OpenOrCreate) MonBitmap est un System.Drawing.Bitmap dynamique = MonIcone.ToBitmap() MonBitmap.Save(MaStream, System.Drawing.Imaging.ImageFormat.Png) MaStream.close() FIN
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 953 mensajes |
|
| Publicado el 14,febrero 2017 - 10:15 |
bonjour Sylvain,
désolé, j'ai tenté de vous répondre hier, mais le forum avait quelques soucis ^^
en adaptant ce bout code au votre, cela devrait fonctionner en utilisant des images PNG.
_exefilename est une chaîne="C:\Program Files\Microsoft Office 15\root\office15\excel.exe" _dest_png_filename est une chaîne="c:\temp\img_icon_excel.png" _handle est un entier _bool est un booléen _my_dc est un entier _handle=API("SHELL32","ExtractIconA",0,&_exefilename,0)
SI PAS _handle DANS (-1,0,1) ALORS _my_dc=dDébutDessin(img_icone,dAvecOpacité) dChangeMode(dessinNormal) POUR ni=0 _A_ img_icone..Largeur POUR nj=0 _A_ img_icone..Hauteur dPoint(ni,nj,RVB(255,255,255),0) FIN FIN API("USER32","DrawIconEx",_my_dc,0,0,_handle,32,32,0,0,3) dSauveImagePNG(img_icone,_dest_png_filename) _bool=API("USER32","DestroyIcon",_handle) FIN
bon dèv |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 88 mensajes |
|
| Publicado el 14,febrero 2017 - 15:28 |
Bonjour et merci pour vos réponses.
Je n'ai testé que la proposition de Christophe qui marche à merveille !
Bonne continuation à vous |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 37 mensajes |
|
| Publicado el 20,noviembre 2019 - 14:55 |
[Mon post précédent n'est pas apparu, au cas où, je le refais]
Bonjour,
Chez moi, cela ne fonctionne pas tout à fait "à merveille". J'ai un code similaire pour faire la même chose, et j'ai repris celui de Christophe pour être sûr, mais le constat est le même. Et idem sans gestion de la transparence.
Pour être plus précis, cela fonctionne sur certains exécutables (tels que Word, Excel, exécutables issus de WD), mais pas sur d'autres (Putty, DesktopOK, petits programme que l'on trouve facilement sur le net). Je ne vois pas trop quelle différence il pourrait y avoir entre eux, pouvant provoquer cette différence de fonctionnement.
Sur ces exe là donc, après appel de l'API "DrawIIconEx", le champ image semble contenir une image totalement transparente. Plus troublant encore, il semblerait aussi qu'à un instant T l'image soit correcte, puis devient vierge. En effet, en pas à pas avec un point d'arrêt sur dSauveImagePNG, j'arrive à visualiser dans l'explorateur Windows le fichier png créé, avec la bonne image. Mais un simple F5 de l'explorateur fait disparaître le contenu de l'image, sans avoir avancé dans le code. Vérité ou illusion ?
Quelqu'un aurait-il une explication/solution sur ce problème ? Merci.Mensaje modificado, 20,noviembre 2019 - 14:58 |
| |
| |
| | | |
|
| | | | |
| | |
|