J'ai un programme java simple qui prend une image jpeg en entrée, dessine une ligne et un rectangle qui l'enregistre ensuite. Je veux que les lignes et le rectangle soient rouges mais dans les images de résultat ils sont toujours noirs, blancs ou gris; Cela dépend de la couleur que je définis pour les lignes.Pourquoi java dessine-t-il de mauvaises lignes de couleur sur une image jpeg?
C'est le simple code
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
public class Lines {
public static void main(String[] args) {
BufferedImage image = null;
File filePath = new File("C:\\Users\\agelormini\\Desktop\\big.jpg");
com.sun.image.codec.jpeg.JPEGImageDecoder jpegDecoder = null;
try {
jpegDecoder = JPEGCodec.createJPEGDecoder (new FileInputStream(filePath));
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
try {
image = jpegDecoder.decodeAsBufferedImage();
} catch (ImageFormatException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.RED);
g2d.drawLine(131, 220, 216, 222);
g2d.drawRect(164, 157, 268 - 164, 287 - 157);
g2d.drawLine(165, 229, 174, 135);
File dest = new File("C:\\Users\\agelormini\\Desktop\\big_mod.jpg");
try {
ImageIO.write(image, "jpg", dest);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Dans ce cas de lignes sera noir, jaune sera blanc ... Je ne comprends pas pourquoi cela se produit. Toute suggestion?
grâce
Votre programme fonctionne bien pour moi - Iget un rectangle rouge et deux lignes rouges. – TDG
La source jpg est-elle une image en noir et blanc par hasard? –
@OHGODSPIDERS oui est une image d'une caméra thermique ... mmm je n'ai pas pensé à ceci :(donc l'image ne peut pas représenter les couleurs en aucune façon – SUPERALEX