Bonjour,
Je suis en train de développer un petit programme qui tourne en arrière plan en Java, j'ai décidé d'ajouter un icône dans le systray histoire de pouvoir interagir avec mon programme sans passer par une interface complète ou la ligne de commande. Mon systray fonctionne mais le problème c'est l'icône qui s'affiche en changeant la couleur de l'arrière de transparent à une couleur sous Linux et sous windows.
J'ai vérifié le profil de couleur (ou espace de couleur comme indiqué sous Gimp) et c'est "Couleur indexée (255 couleurs)" donc normalement si j'ai bien compris la logique en chargeant l'image en mode BufferedImage.TYPE_BYTE_INDEXED (mais j'ai aussi essayé TYPE_INT_ARGB l'arrière est juste blanc et plus noir) ça devrait chargé l'image avec l'arrière plan transparent. Le problème c'est que je ne trouve pas de moyen de changer l'image avec ce type, mais unique la charger puis la recopier sur une BufferedImage qui est sur ce profil de couleur.
En résumé j'ai ça comme code dans mon main lié à mon TrayIcon :
Si vous voulez un code qui peut être compilé directement je peux le faire, suffit de demander !
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 ... String imgIconPath = "chemin/jusqu_a/mon/image/icon32.gif"; ImageIcon imgIcon = null; final TrayIcon trayIcon; imgIcon = new ImageIcon(imgIconPath); Image image = imgIcon.getImage(); BufferedImage buffImage = new BufferedImage( image.getWidth(null), image.getHeight(null), //~ BufferedImage.TYPE_INT_ARGB BufferedImage.TYPE_BYTE_INDEXED ); Graphics g = buffImage.getGraphics(); g.drawImage(image, 0, 0, null); trayIcon = new TrayIcon(buffImage); trayIcon.setImageAutoSize(true); final SystemTray tray = SystemTray.getSystemTray(); tray.add(trayIcon); ...
J'aimerai savoir si quelqu'un saurait comment faire en sorte que mon arrière plan soit transparent ?
Je précise que j'ai cherché sur le net comment charger une image transparente en java et qu'à chaque fois le code malgré sa complexité je l'ai testé mais au mieux j'ai obtenu un passage de la couleur blanche ou noire à un rose.
J'ai bien dans l'idée qu'il doit être possible de détecter ces pixels qui devrait être transparent pour changer la valeur du alpha qui doit être mauvaise (je l'ai fait il y a quelques mois en C et OpenGL mais c'était assez simple puisque je savais que la structure était un simple tableau à deux dimensions).
Je suis preneur de toute solution ou même piste, juste là je ne vois plus part où chercher !
Merci d'avance !
Partager