2017-03-22 21 views
0

나는 jpeg 이미지를 입력으로받는 간단한 자바 프로그램을 가지고있다. 그 프로그램은 라인과 사각형을 그려서 저장한다. 선과 직사각형이 빨간색이 되길 원하지만 결과 이미지는 항상 검정, 흰색 또는 회색입니다. 그것은 내가 라인에 대해 설정 한 색상에 따라 다릅니다.왜 Java가 jpeg 이미지에 잘못된 색상 선을 그립니까?

이 이런 이유는 ... 이해가 안 흰색 될 것 노란색과 검은 색이 될 것이다이 경우 라인에서 간단한 코드

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

} 

입니다. 어떠한 제안?

image = convert(image, BufferedImage.TYPE_INT_BGR); 
:

감사

+0

프로그램이 제대로 작동합니다. 빨간 직사각형과 빨간 선이 두 개 있습니다. – TDG

+1

우연히 원본 JPG는 흑백 이미지입니까? –

+0

@OHGODSPIDERS 예 열전 사 카메라의 이미지입니다. 음 ... 나는 이것에 대해 생각하지 않았습니다 :(이미지는 어떤 방식 으로든 색상을 표현할 수 없습니까?) – 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; 
} 

을 사용하여 문제를 해결하기 위해 관리

ARGB가 이전 이미지의 잘못된 색상을 초래했기 때문에 TYPE_INT_BGR을 사용해야했습니다. 나는 환경에이기 때문에 그 문제가 아니다.

도움에 감사드립니다!