superposition d'images en java
J'espère que vous pouvez me donner quelques conseils pour résoudre mon problème.
J'ai besoin de la superposition de plusieurs images sur un bouton.mais le problème est,
c'est l'image de base (dent): (http://i.imgur.com/7tIcP.gif)
ma première image est ceci:
http://i.imgur.com/FYuD8.gif
et puis j'ai mis ceci:
http://i.imgur.com/mWz9c.gif
la première image chevauche la seconde, de sorte que je ne peux voir seulement la deuxième image...
peut-être que vous allez me dire qu'une option consiste à modifier l'ordre de l'image avant de la superposition, mais à l'utilisateur de sélectionner ce qui sera le premier, peut-être juste envie de la première image, mais dans d'autres cas, l'utilisateur sera mis à la première, puis la deuxième ou vice-versa...
mon code est: est-ce
BufferedImage large=null;
large = ImageIO.read(new File("firstimage.gif"));
BufferedImage small=null;
small = ImageIO.read(new File("secondimage.gif"));
int w = Math.max(large.getWidth(), small.getWidth());
int h = Math.max(large.getHeight(), small.getHeight());
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
//paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
g.drawImage(large, 0, 0, null);
g.drawImage(small, 0, 0, null);
ImageIO.write(combined, "PNG", new File("twoInOne.png"));
ImageIcon icon1 = new ImageIcon(combined);
jbutton1.setIcon(icon1);
Est peut-être d'un format des images en question, ou de mon code, mais je préfère que vous les gars peut m'aider avec ce problème je vous remercie.
L'instant j'ai téléchargé les 3 images: - je me passer de l'image de base (dent) parce que je ne pense pas que ce sera le problème là-dedans.
- Pourquoi le code de l'état GIF alors que ces deux images sont au format JPG?
- Lorsque l'utilisateur veut à la fois, ce qui est censé arriver? Que devrait-il ressembler?
- Brûlures de congélation comprendre le but... la première image de superposition de la deuxième image sans overwirte la première image...
- mm... je rly ne pas l'obtenir... les liens que j'avais posté en sont quelques exemples... mes images sont en .format gif
- Afin que les pièces de l'image 2 qui ne sont pas totalement transparent (par exemple: bleu/rouge quoi que ce soit) sont censés être semi-transparent?
- exactement... donc mon problème est que quand je mets la deuxième... simplement remplacer le filtre bleu
- J'ai besoin de cette subefotos.com/ver/?7cd9a71926ca04e6bebe6a4986df8ba2o.jpg jetez un oeil
Vous devez vous connecter pour publier un commentaire.
Pour rendre une couleur transparente, vous pouvez parcourir les pixels d'une
BufferedImage
ou utiliser un adapté àLookupOp
. Pour ce dernier, voir les articles cités ici. Vous pouvez ensuite combiner les images à l'aidedrawImage()
. La valeur par défaut composite règle,AlphaComposite.SRC_OVER
, devrait être satisfaisante; si pas, vous pouvez le changer, comme indiqué ici.Votre code devrait être bon pour la combinaison de deux images ensemble. Cependant, comme vous l'avez dit, vos deux images sont de la même taille, et ils ne semblent pas avoir de la transparence. Ce sera cause que ce soit image est tirée de la deuxième à toujours "écraser" la première image de la nouvelle image combinée.
La solution que vous voulez probablement pour cela, est de briser les différents morceaux que vous voulez superposer les uns les autres dans distinct, des images plus petites. Avec vos images, il semble que vous voulez avoir plusieurs superpositions sur le dessus d'une dent pour afficher diverses informations. Vous aurez besoin de trois choses dans ce cas: une image d'une dent, une image contenant l'incrustation rouge, et une image contenant le filtre bleu. Tous les trois de ces images doit être transparent, et pas de blanc, arrière-plan, de sorte qu'ils n'écrasent pas les couleurs dans toute préalablement dessinées à l'image. Lorsque vous faites cela, vous aurez envie de tirer la dent, puis la superposition de 1 (rouge/bleu) puis la superposition de 2 (rouge/bleu). Cela devrait vous obtenez la sortie que vous recherchez.
La clé est de définir l'alpha float valeur, dire deux couche, set alpha à 0,5, à trois couches, set alpha 0.33, à quatre couches, set alpha 0.25 ... de toute façon, ici, c'est l'exemple de code