2017-05-04 2 views
2

ImageJ API를 사용하여 일부 24 비트 TIFF 이미지를 8 비트 JPG로 변환하고 있습니다. 변환 후이 이미지에서 다른 처리를 수행해야합니다. 내가이 만든 :ImageJ - 파일을 저장하지 않고 이미지 형식 변환

ImagePlus img = IJ.openImage(f.getAbsolutePath()); // Open image 
new ImageConverter(img).convertToGray8(); // Convert image to 8-bit grayscale 
IJ.saveAs(img, "jpg", newPath); // Export image to jpg 
// Read the same image again 
// Process it 

내 문제는 변환이 디스크에 이미지를 저장해야한다는 것입니다 나는 또한 내가 많은 수의 이미지를 처리하고있어, 직후 다시 읽어야한다. jpg 이미지를 만들고 디스크에 저장하지 않고 개체에 넣을 수있는 방법이 있습니까?

특히, 내 목표는 이미지의 바이트 내용으로 Hadoop SequenceFile을 만들어서 저장할 필요가 없다는 것입니다.

답변

1

할 수 있습니다와 같은 ImagePlus 클래스의 원시 버퍼 이미지를 얻을 : 그래서 이론적으로

BufferedImage rawImage = img.getBufferedImage(); 

당신이 대신 디스크에 쓰는 바이트를 얻기 위해 거기에서 API를 사용할 수를

ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
ImageIO.write(rawImage, "jpg", baos); 
byte[] imageInByte=baos.toByteArray(); 
+1

대신 당신의 BufferedImage의 BufferedImage = img.getBufferedImage()와 같은 구현을 사용 ImageIO.write의 이미지를()를 사용할 수 없습니다. 이 방식으로, 내가 빠뜨린 것은 ImageIO가 File 대신 ByteArrayOutputStream에 쓸 수 있다는 것입니다. 덕분에 많은 것을 얻었습니다. 감사합니다! – kennyFF92

+0

! 정확한 답변이 업데이트되었습니다. –

0

를 작동합니다

희망, 나는 당신의 가장 좋은 방법은 바로 BufferedImage를 잡아보다는 저장하는 것입니다 생각 :

,

ImagePlus myImage = IJ.getImage();을 사용하여 ImagePlus 객체를 반환하면 myImage.getBufferedImage()을 사용하여 표준 java.awt.image.BufferedImage을 반환 할 수 있습니다. 이제 ImagePlus 라이브러리가 없어도 버퍼링 된 이미지로 작업을 계속할 수 있습니다. ImagePlus 방법과

ImagePlus img = IJ.openImage(f.getAbsolutePath()); // Open image 
new ImageConverter(img).convertToGray8(); // Convert image to 8-bit grayscale 
ImagePlus myImage = IJ.getImage(); 
BufferedImage bufferedImage = myImage.getBufferedImage(); 
// Process bufferedImage 

:

8 비트 또는 RGB BufferedImage로서 이미지의 사본을 돌려() https://imagej.nih.gov/ij/developer/api/ij/ImagePlus.html

공개 java.awt.image.BufferedImage getBufferedImage. 이 추상 클래스이기 때문에 다른 대답 @sorifiend에 의해 제안

+0

그래도 여전히 필요한 부분이 아니기 때문에 필요한 부분이 아닙니다. – kennyFF92

관련 문제