FileInputStream 형식의 두 TIFF 이미지를 단일 Tiff 이미지로 병합하려고합니다. 이미지가 병합되지만 출력 파일은 검은 색으로 표시됩니다. 원본 이미지와 변환 된 이미지를 비교하면서 변환 된 이미지의 비트 심도가 1로 변경되었음을 알 수있었습니다. 아무도이 솔루션을 제공 할 수 있습니까? 내가 사용하고있는 코드는 다음과 같습니다FileInputStream에서 Image로 변환하면 출력 이미지가 검은 색이됩니다.
public class MergerTiffUsingBuffer {
public static void main(String[] args) {
File imageFile1 = new File("D:/Software/pdfbox-1.3.1.jar/tiff/FLAG_T24.TIF");
File imageFile2 = new File("D:/Software/pdfbox-1.3.1.jar/tiff/CCITT_3.TIF");
try {
FileInputStream fis1 = new FileInputStream(imageFile1);
FileInputStream fis2 = new FileInputStream(imageFile2);
List<BufferedImage> bufferedImages=new ArrayList<>();
List<FileInputStream> inputStreams=new ArrayList<>();
inputStreams.add(fis1);
inputStreams.add(fis2);
Iterator<?> readers = ImageIO.getImageReadersByFormatName("tiff");
ImageReader reader = (ImageReader) readers.next();
for(FileInputStream inputStream:inputStreams){
ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
reader.setInput(iis);
ImageReadParam param = reader.getDefaultReadParam();
Image image = reader.read(0, param);
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
OutputStream out = new FileOutputStream("D:/Software/pdfbox-1.3.1.jar/tiff/MergedTiff.TIF");
BufferedImage binarized = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(),BufferedImage.TYPE_BYTE_BINARY);
ImageIO.write(binarized, "tiff", out);
bufferedImages.add(bufferedImage);
}
System.out.println(bufferedImages.size());
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
당신이 당신의 다음 코드 줄에서 getWidth()와 getHeight()에 인수로 전달하는 이유 널 (null)에 자세히 설명해 수 : ** BufferedImage bufferedImage = 새로운 BufferedImage (image.getWidth (null), image.getHeight (null), BufferedImage.TYPE_INT_RGB); **. –
image.getWidth는 ImageObserver 인터페이스를 입력으로 허용하지만 여기서는 적용 할 수 없습니다 (내가 추측하고 있습니다). 이것이 null 인 이유입니다. – Anirban
'null' 인수는 단순히 "오래된"이미지 처리의 인공물 일뿐입니다. ImageObserver 여야합니다. 없으면 http://docs.oracle.com/javase/8/docs/api/java/awt/MediaTracker.html을 사용하여 이미지가로드 될 때까지 기다려야합니다. 어떤 경우 든 : 당신은'BufferedImage.TYPE_BYTE_BINARY'을 생성하고 있습니다. 그래서 왜 1보다 약간 다른 비트 깊이를 기대합니까? 이것은 * binary *입니다. 0 또는 1 대신에'BufferedImage.TYPE_INT_RGB'을 사용해주세요. – Marco13