J'ai un problème en essayant de faire une copie de l'objet BufferedImage
. J'utilise la méthode drawImage (BufferedImage image, int x, int y, ImageObserver observer)
pour dessiner l'image originale sur le nouveau, et je règle BufferedImage.TYPE_INT_ARGB
pour chaque image, cependant, quand j'imprime les valeurs de nouvelles couleurs d'image, les valeurs RGBA sont légèrement différentes.Dessiner un BufferedImage à un autre BufferedImage est en train de changer les valeurs RGBA
Je dois faire une copie de l'image originale parce que j'ai un JPanel
tenant une image à dessiner comme arrière-plan. Dans d'autres parties de mon application je dois obtenir l'image du panneau, mais je voudrais renvoyer une copie pour éviter que l'image soit modifiée d'ailleurs.
Comment puis-je résoudre ce problème?
code:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class BufferedImageColorBug
{
public static void main (String [] a) {
Color [] colors = {
new Color (202,230,186,14),
new Color (254,65,188,214),
new Color (247,104,197,198),
new Color (158,93,79,239),
new Color (235,45,57,194),
new Color (155,77,126,150),
new Color (164,237,20,172),
new Color (184,106,97,191),
new Color (187,249,135,85),
new Color (236,112,98,24)
};
BufferedImage image = new BufferedImage (colors.length, 1, BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < colors.length; x ++) image.setRGB (x, 0, colors [x].getRGB());
BufferedImage copy = new BufferedImage (image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = copy.createGraphics();
g2d.drawImage (image, 0, 0, null);
g2d.dispose();
for (int x = 0; x < colors.length; x ++) {
Color color = new Color (copy.getRGB (x, 0), true);
System.out.println (color.getRed() + "," + color.getGreen() + "," + color.getBlue() + "," + color.getAlpha());
}
}
}
C'est le ouput je reçois:
200,237,182,14
254,66,188,214
247,104,197,198
158,93,79,239
235,45,57,194
155,76,126,150
165,237,19,172
184,105,97,191
186,249,135,85
234,117,96,24
EDIT
J'ai parlé de l'image de clonage parce que c'est mon but, mais cette question i aimerait comprendre pourquoi valeurs rgba sont différentes entre les images. J'ai déjà essayé d'utiliser BufferedImage.TYPE_INT_ARGB_PRE
, mais cela n'a pas aidé.
Merci, ça fonctionne comme un charme! – Ansharja