2017-03-22 1 views
0

私は入力としてjpegイメージを取る単純なJavaプログラムを持っています。そしてそれを保存している線と矩形を描きます。私は線と矩形を赤色にしたいが、結果イメージでは常に黒、白または灰色である。それはどの色をラインに設定するかによって異なります。jpeg画像にJavaが間違った色の線を描くのはなぜですか?

これは、行が黄色で、黒になります。この場合、単純なコード

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(); 
    } 
} 

} 

であるが、これはなぜ起こるか私は理解していない...白になります。なにか提案を?

おかげ

+0

あなたのプログラムはうまく動作します - 赤い矩形と2つの赤い線があります。 – TDG

+1

万が一、ソースJPGが白黒画像ですか? –

+0

@ OHGODSPIDERS yesは熱カメラの画像です... mmm私はこれについて考えることはありませんでした:(イメージはどのようにも色を表現できません) – SUPERALEX

答えて

1

は、私はちょうどそれが動作のGraphics2Dを作成する前に、前のコードに次の行を追加する場合

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; 
} 

この小さなCONVERT関数を使用して問題を解決するために管理:

image = convert(image, BufferedImage.TYPE_INT_BGR); 

ARGBは以前の画像の色が間違っていたので、TYPE_INT_BGRを使用しなければなりませんでした。私は環境に勝つので、問題ではない

助けてくれてありがとう!

関連する問題