2013-10-25 2 views
1

색상 색인 된 TIFF 이미지 (8 비트)가 있고 그것을 RGB 24 비트 이미지 (색인 생성되지 않음)로 변환하고 싶습니다. 그 일을하는 방법은 무엇입니까?Java에서 색인 된 이미지를 RGB 이미지로 변환하는 방법은 무엇입니까?

저는 JMagick을 사용하고 있습니다. 더 이상 인덱싱되지 불구하고 이미지가 행운 인 8 비트 그 후에도

image.transformRgbImage(info.getColorspace()); 

입니다

경우에도 : 이상한 방식으로, 내가 사용하는 그레이 스케일입니다 인덱스 8 비트 이미지를 잘 작동 회색조이므로 실제로는 8 비트 여야합니다. 괴상한 점은 transformRgbImage()가 이미지를 24 비트로 변환 할 것을 기대하기는하지만 transformRgbImage()가이를 수행한다는 것입니다. 어쨌든 ...

컬러 인덱스 된 8 비트 이미지의 경우 동일한 방법으로 작동하지 않습니다. 그 목표를 달성하기 위해 JMagick API를 사용하는 방법을 모르겠습니다.

image.setDepth(24); 

나 :

info.setDepth(24); 

그러나 EXCEPTION_ACCESS_VIOLATION 모두 결과를 내가 설정했습니다. I가 설정되면 :

info.setDepth(32); 

예외 1) 그러나 화상 안된다 32 비트이며, 2))은 모두 블랙 (1 고유 색깔, 발생하지 않는다. 왜 setDepth (24)는 그런 예외를 발생 시키는가 ?? 어떻게해야합니까?

미리 도움을 주셔서 감사합니다.

+0

이미지에 투명도가 있습니까? 24 비트와 32 비트의 유일한 차이점은 투명성입니다. 또한 색인 된 이미지는 투명도 (투명 픽셀에 대한 하나의 색인)를 지원합니다. – vadimvolk

+0

나는 생각하지 않는다 ... 내가 가지고있는 유일한 부드러운 김프는 투명한 채널을위한 것처럼 체크 된 패턴으로 배경을 표시하지 않는다. 또한 내 이미지는 TIFF입니다. TIFF는 투명 색상을 가질 수 없습니까? – Erwann

답변

2

jmagick에 대해 알지 못하지만 일반적으로 일단 이미지 객체를 만들면 속성이 고정됩니다 (크기 및 색상 모델).

당신은하지 변화 이미지 속성을, 당신은 원하는 대상의 특성을 가진 새로운 이미지를 생성하고 새 이미지로 원본 이미지를 페인트. 일반 코어 자바에서는 다음과 같이 간단하게 처리합니다.

public BufferedImage toRGB(Image i) { 
    BufferedImage rgb = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_RGB); 
    rgb.createGraphics().drawImage(i, 0, 0, null); 
    return rgb; 
} 
+0

단순한 반면 나는 힘든 방법을 시도했다! 도움이되는 답변을 해주셔서 대단히 감사합니다. 이제는 프로세스에서 손실 된 해상도 및 압축 설정을 다시 설정해야합니다. – Erwann

관련 문제