Je souhaite placer une image dans un contrôle d'image VBA UserForm et conserver sa transparence (transparence on-off 1 bit comme dans un fichier ico, ou mieux; transparence de canal alpha complet comme un png peut avoir). En d'autres termes, les parties de l'image qui sont transparentes dans le fichier d'origine sont également transparentes sur mon formulaire utilisateur, ce qui me permet de superposer des images par exemple.Charger une image avec une transparence alpha sur un userform à partir d'un chemin
Tout d'abord, je ne pouvais pas trouver une réponse sur le SO, donc je devais regarder autres forums. J'ai trouvé une méthode qui prend en charge la transparence on/off 1 bit, je la posterai comme une réponse, maintenant on peut la trouver plus facilement ici.
Mais la méthode que j'ai trouvé charges images du presse-papiers, ce qui signifie charger à partir d'un filepath je dois
ActiveSheet.Pictures.Insert("[filepath]").Cut
myUserform.someImageControl.Picture = PastePicture
qui semble lent et alambiqué, et efface également le presse-papiers, alors je me demande s'il y a un bon moyen de charger des images transparentes à un userform à partir d'un chemin de fichier (sans utiliser de presse-papier)?
Le deuxième point est que le code actuel je regarde terrible (les résultats qui est, bien que le code lui-même est un peu en désordre). Pour obtenir de meilleurs résultats, je suis surpris qu'il n'y ait pas de cadre que je puisse référencer qui renvoie un IPictureDisp
avec transparence.
Le image Windows v2.0 Aquisition Bibliothèque (wiaaut.dll
) peut être utilisé pour charger PNGs à un contrôle - par exemple
Function loadImg(fileLocation As String) As IPictureDisp
Dim imgctrl As New WIA.ImageFile 'can handle more extensions than built in LoadPicture function
With imgctrl
.LoadFile fileLocation
Set loadImg = .fileData.Picture
End With
Set imgctrl = Nothing
End Function
Cependant, il supprime la transparence qui n'est pas bonne. Donc, je pose cette question pour mettre en commun les ressources sur les méthodes alternatives que les gens connaissent (le cas échéant), et qui fournissent les meilleurs résultats?