Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD8 Perte de la transparence d'une icone

5 réponses
Avatar
Georges Peyre
Bonjour,
Je récupère des icones dans diverses phases exécutables
Pour ce faire j'utilise le code suivant pour les charger dans une
ListeImage
Malheureusement je perd la transparence de fond qui entoure souvent le
dessin des icones
et lorsque je restitue l'icone récupérée dans un raccourci généré sur
le bureau Windows l'icone du raccourci est toujours carrée avec un fond
gris pâle
Y-a-t-il un moyen de conserver cette transparence
J'ai essayé avec une icône au format .gif mais windows ne l'accepte pas
et la remplace par une icone par défaut
Cordialement

// code utilisé
BOUCLE
eHandleIcone=API("Shell32","ExtractIconA",eHandleInstance,&szNomFichierEXE,eIndexIcone)
SI eHandleIcone>0 ALORS
sNomFichierBMP =
ComplèteRep(fRepExe())+fExtraitChemin(sNomFichierExe,
fFichier)+"_"+NumériqueVersChaine(eIndexIcone)+".BMP"
dFinDessin()
eHandleDC=dDébutDessin(sNomChampImage)
API("user32","DrawIcon",eHandleDC,0,0,eHandleIcone)
dSauveImageBMP(sNomChampImage,sNomFichierBMP)
API("user32","DestroyIcon",eHandleIcone)
ListeAjoute(ListeIcones,sNomFichierBMP, sNomFichierBMP)
eIndexIcone++
SINON
SORTIR
FIN
FIN

--
Elle est pas belle la vie ?

5 réponses

Avatar
Georges Peyre
Bonjour,

Après des tests plus poussés je me suis rendu compte qu'en réalité la
transparence est perdue parce que le champ image ( sNomChampImage ) est
défini avec un fond transparent et que cette transparence est remplacée
par la couleur de fond récupérée a travers la transparence du champ
image ( en l'occurence c'est la couleur de fond de la fenêtre sur
laquelle est le champ image )
( Je sais c'est pas très clair !!! ) :/

Alors ma question est : comment faire pour que la transparence
récupérée avec l'icone reste transparence au cours de la sauvegarde par
dSauveImageBMP ?
Je comprend bien qu'avec dSauveImageBMP ce doit être insoluble car ...
... si je donne par exemple une couleur de fond blanc au champ image
la transparence récupérée est remplacée par la couleur blanc.
... si j'affecte la couleur transparent au fond du champ image la
transparence sera remplacée par la couleur de fond de la fenêtre

Y-a-t-il un moyen de récupérer le dessin de l'icône et de la sauver
dans un fichier .ICO ou .BMP sans passer par l'intermédiaire du champ
image ?

Merci d'avance

Cordialement





Georges Peyre a couché sur son écran :
Bonjour,
Je récupère des icones dans diverses phases exécutables
Pour ce faire j'utilise le code suivant pour les charger dans une ListeImage
Malheureusement je perd la transparence de fond qui entoure souvent le dessin
des icones
et lorsque je restitue l'icone récupérée dans un raccourci généré sur le
bureau Windows l'icone du raccourci est toujours carrée avec un fond gris
pâle
Y-a-t-il un moyen de conserver cette transparence
J'ai essayé avec une icône au format .gif mais windows ne l'accepte pas et la
remplace par une icone par défaut
Cordialement

// code utilisé
BOUCLE
eHandleIcone=API("Shell32","ExtractIconA",eHandleInstance,&szNomFichierEXE,eIndexIcone)
SI eHandleIcone>0 ALORS
sNomFichierBMP = ComplèteRep(fRepExe())+fExtraitChemin(sNomFichierExe,
fFichier)+"_"+NumériqueVersChaine(eIndexIcone)+".BMP"
dFinDessin()
eHandleDCÝébutDessin(sNomChampImage)
API("user32","DrawIcon",eHandleDC,0,0,eHandleIcone)
dSauveImageBMP(sNomChampImage,sNomFichierBMP)
API("user32","DestroyIcon",eHandleIcone)
ListeAjoute(ListeIcones,sNomFichierBMP, sNomFichierBMP)
eIndexIcone++
SINON
SORTIR
FIN
FIN



--
Elle est pas belle la vie ?
Avatar
farplus
Georges Peyre a pensé très fort :
Bonjour,

Après des tests plus poussés je me suis rendu compte qu'en réalité la
transparence est perdue parce que le champ image ( sNomChampImage ) est
défini avec un fond transparent et que cette transparence est remplacée par
la couleur de fond récupérée a travers la transparence du champ image ( en
l'occurence c'est la couleur de fond de la fenêtre sur laquelle est le champ
image )
( Je sais c'est pas très clair !!! ) :/

Alors ma question est : comment faire pour que la transparence récupérée avec
l'icone reste transparence au cours de la sauvegarde par dSauveImageBMP ?
Je comprend bien qu'avec dSauveImageBMP ce doit être insoluble car ...
... si je donne par exemple une couleur de fond blanc au champ image la
transparence récupérée est remplacée par la couleur blanc.
... si j'affecte la couleur transparent au fond du champ image la
transparence sera remplacée par la couleur de fond de la fenêtre

Y-a-t-il un moyen de récupérer le dessin de l'icône et de la sauver dans un
fichier .ICO ou .BMP sans passer par l'intermédiaire du champ image ?

Merci d'avance

Cordialement





Georges Peyre a couché sur son écran :
Bonjour,
Je récupère des icones dans diverses phases exécutables
Pour ce faire j'utilise le code suivant pour les charger dans une
ListeImage
Malheureusement je perd la transparence de fond qui entoure souvent le
dessin des icones
et lorsque je restitue l'icone récupérée dans un raccourci généré sur le
bureau Windows l'icone du raccourci est toujours carrée avec un fond gris
pâle
Y-a-t-il un moyen de conserver cette transparence
J'ai essayé avec une icône au format .gif mais windows ne l'accepte pas et
la remplace par une icone par défaut
Cordialement

// code utilisé
BOUCLE
eHandleIcone=API("Shell32","ExtractIconA",eHandleInstance,&szNomFichierEXE,eIndexIcone)
SI eHandleIcone>0 ALORS
sNomFichierBMP = ComplèteRep(fRepExe())+fExtraitChemin(sNomFichierExe,
fFichier)+"_"+NumériqueVersChaine(eIndexIcone)+".BMP"
dFinDessin()
eHandleDCÝébutDessin(sNomChampImage)
API("user32","DrawIcon",eHandleDC,0,0,eHandleIcone)
dSauveImageBMP(sNomChampImage,sNomFichierBMP)
API("user32","DestroyIcon",eHandleIcone)
ListeAjoute(ListeIcones,sNomFichierBMP, sNomFichierBMP)
eIndexIcone++
SINON
SORTIR
FIN
FIN





Bonjour,
je n'ai pas de test, donc à considérer ma solution "avec bénéfice
d'inventaire":
donne comme couleur de fond: magenta clair (mieux définis toi-même une
valeur RVB). Utilise ensuite dsauveimagePNG(champ, "nom
image",transparence)
puis transforme le png en bmp.
Tiens - nous au courant.

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Georges Peyre
Bonjour

Dans son message précédent, farplus a écrit :
je n'ai pas de test, donc à considérer ma solution "avec bénéfice
d'inventaire":
donne comme couleur de fond: magenta clair (mieux définis toi-même une valeur
RVB). Utilise ensuite dsauveimagePNG(champ, "nom image",transparence)
puis transforme le png en bmp.
Tiens - nous au courant.



J'ai essayé cette méthode mais celà ne change rien car c'est déjà trop
tard lorsque dsauveimagePNG ( ou n'importe quel dsauveimage... )
s'exécute la notion de transparence a DEJA été remplacée par les pixels
de fond de la fenêtre et par exemple si le fond de la fenêtre contenant
le champ image est gris les pixels de transparence sont devenus gris
d'ou mon problème.
La solution serait que l'image conserve le résultat du dessin extrait
sans transformation de la transparence.

J'ai également essayé une image AUCUNE transparence ( ni point en haut
à gauche, ni couleur magenta ) : le résultat est le même.

Pourtant certains logiciels récupérateurs d'icones obtiennent ce
résultat et restituent une icone dont la transparence est conservée.
D'ailleurs à ce propos la restitution de l'icone est de très mauvaise
qualité comme par exemple IconExtractor alors que AWIcons restitue des
icones d'une qualité exceptionnelle.

En définitive mon problème est que je ne sais pas quoi faire pour
récupérer le dessin de l'icone dans lequel les pixel de transparence
sont conservés sans modification.
Logiquement le fait de déclarer l'image avec AUCUNE transparence
devrait me permettre de garder tous les pixels d'origine alors qu'en
réalité ils sont transformés comme si j'avais sélectionné le point ou
la couleur magenta :
Qu'en penses-tu

D'autre part j'aurais bien utilisé un activex mais je n'en pas encore
trouvé.

Ou alors ... existe-t-il d'autres API que extracticoneA pour extraire
un dessin et le copier dans un fichier sans le placer dans une image ??

Cordialement

--
Elle est pas belle la vie ?
Avatar
farplus
Georges Peyre a émis l'idée suivante :
Bonjour

Dans son message précédent, farplus a écrit :
je n'ai pas de test, donc à considérer ma solution "avec bénéfice
d'inventaire":
donne comme couleur de fond: magenta clair (mieux définis toi-même une
valeur RVB). Utilise ensuite dsauveimagePNG(champ, "nom
image",transparence)
puis transforme le png en bmp.
Tiens - nous au courant.



J'ai essayé cette méthode mais celà ne change rien car c'est déjà trop tard
lorsque dsauveimagePNG ( ou n'importe quel dsauveimage... ) s'exécute la
notion de transparence a DEJA été remplacée par les pixels de fond de la
fenêtre et par exemple si le fond de la fenêtre contenant le champ image est
gris les pixels de transparence sont devenus gris d'ou mon problème.
La solution serait que l'image conserve le résultat du dessin extrait sans
transformation de la transparence.

J'ai également essayé une image AUCUNE transparence ( ni point en haut à
gauche, ni couleur magenta ) : le résultat est le même.

Pourtant certains logiciels récupérateurs d'icones obtiennent ce résultat et
restituent une icone dont la transparence est conservée. D'ailleurs à ce
propos la restitution de l'icone est de très mauvaise qualité comme par
exemple IconExtractor alors que AWIcons restitue des icones d'une qualité
exceptionnelle.

En définitive mon problème est que je ne sais pas quoi faire pour récupérer
le dessin de l'icone dans lequel les pixel de transparence sont conservés
sans modification.
Logiquement le fait de déclarer l'image avec AUCUNE transparence devrait me
permettre de garder tous les pixels d'origine alors qu'en réalité ils sont
transformés comme si j'avais sélectionné le point ou la couleur magenta :
Qu'en penses-tu

D'autre part j'aurais bien utilisé un activex mais je n'en pas encore trouvé.

Ou alors ... existe-t-il d'autres API que extracticoneA pour extraire un
dessin et le copier dans un fichier sans le placer dans une image ??

Cordialement



Bonjour,

essaie ceci:
deux champs images superposés de mêmes dimensions, le champ en dessous
rempli de magenta ou d'une autre couleur.
A+

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Georges Peyre
farplus a présenté l'énoncé suivant :
essaie ceci:
deux champs images superposés de mêmes dimensions, le champ en dessous rempli
de magenta ou d'une autre couleur.



Aucun changement

Je suis désolé de rester avec un résultat incomplet : comme quoi même
avec Windev 8 on ne peut pas tout faire !
J'abandonne !

Merci quand même
Cordialement

--
Elle est pas belle la vie ?