2013-10-25 85 views
1

我有一個顏色索引的TIFF圖像(8位),我想將其轉換爲RGB 24位圖像(未編入索引)。將有什麼辦法做到這一點?如何將索引圖像轉換爲Java中的RGB圖像?

我正在使用JMagick。在一個奇怪的方式,它工作正常進行索引8位圖像是灰度當我使用:

image.transformRgbImage(info.getColorspace()); 

即使圖像,雖然沒有收錄任何更多的,仍然是8位之後,這是幸運的因爲它是灰度級的,實際上應該是8位。奇怪的是transformRgbImage()執行,儘管我希望它將圖像轉換爲24位。無論如何...

同樣的方式不適用於顏色索引8位圖像。我只是不知道如何使用JMagick API來實現這一目標。我試着設置:

image.setDepth(24); 

或:

info.setDepth(24); 

但無論結果在EXCEPTION_ACCESS_VIOLATION。當我設置:

info.setDepth(32); 

不發生異常,1),但是該圖像是32位,這不應該,和2)它是全黑(1種獨特的顏色)。爲什麼setDepth(24)會引發這樣的異常?我應該怎麼做?

在此先感謝您的幫助。

+0

你的圖像是否具有透明度? 24位和32位之間的唯一區別是透明度。索引圖像也支持透明度(透明像素的一個索引)。 – vadimvolk

+0

我認爲不是...我得到的唯一軟件是GIMP,它不會像背景那樣將背景顯示爲檢查圖案,就像它會爲透明通道一樣。另外,我的圖像是一個TIFF。 TIFF不能有透明色,可以嗎? – Erwann

回答

2

我不知道jmagick,但通常一旦你創建一個圖像對象的屬性是固定的(大小和顏色模型)。

你不變化的圖像性能,您可以創建與期望的目標性能圖像和畫你的原始圖像插入新的圖像。在普通的核心Java中,你可以簡單地這樣做:

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

相關問題