2017-03-22 1 views
0

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

+0

Votre programme fonctionne bien pour moi - Iget un rectangle rouge et deux lignes rouges. – TDG

+1

La source jpg est-elle une image en noir et blanc par hasard? –

+0

@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

Répondre

1

je réussi à résoudre le problème en utilisant cette petite fonction de conversion

public static BufferedImage convert(BufferedImage src, int bufImgType) { 
    BufferedImage img= new BufferedImage(src.getWidth(), src.getHeight(), bufImgType); 
    Graphics2D g2d= img.createGraphics(); 
    g2d.drawImage(src, 0, 0, null); 
    g2d.dispose(); 
    return img; 
} 

si j'ajouter cette ligne au code précédent juste avant la création Graphics2D cela fonctionne:

image = convert(image, BufferedImage.TYPE_INT_BGR); 

J'ai dû utiliser TYPE_INT_BGR car ARGB a entraîné des couleurs fausses de l'image précédente. Je suis dans l'environnement de la victoire donc ce n'est pas un problème

merci pour l'aide!