我在看ImageConverter類,試圖找出如何將BufferedImage轉換爲8位顏色,但我不知道如何做到這一點。我還在互聯網上搜索,找不到簡單的答案,他們都在談論8位灰度圖像。我只是想將圖像的顏色轉換爲8位......沒有別的東西,不會調整大小。有沒有人介意告訴我如何做到這一點。如何將BufferedImage轉換爲8位?
8
A
回答
2
從文章"Transparent gifs in Java" at G-Man's Uber Software Engineering Blog這段代碼工作得很好:
public static void main(String[] args) throws Exception {
BufferedImage src = convertRGBAToIndexed(ImageIO.read(new File("/src.jpg")));
ImageIO.write(src, "gif", new File("/dest.gif"));
}
public static BufferedImage convertRGBAToIndexed(BufferedImage src) {
BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
Graphics g = dest.getGraphics();
g.setColor(new Color(231, 20, 189));
// fill with a hideous color and make it transparent
g.fillRect(0, 0, dest.getWidth(), dest.getHeight());
dest = makeTransparent(dest, 0, 0);
dest.createGraphics().drawImage(src, 0, 0, null);
return dest;
}
public static BufferedImage makeTransparent(BufferedImage image, int x, int y) {
ColorModel cm = image.getColorModel();
if (!(cm instanceof IndexColorModel))
return image; // sorry...
IndexColorModel icm = (IndexColorModel) cm;
WritableRaster raster = image.getRaster();
int pixel = raster.getSample(x, y, 0); // pixel is offset in ICM's palette
int size = icm.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
icm.getReds(reds);
icm.getGreens(greens);
icm.getBlues(blues);
IndexColorModel icm2 = new IndexColorModel(8, size, reds, greens, blues, pixel);
return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(), null);
}
+0
工作很好,只需要刪除透明部分。 –
1
4
您可以使用JAI(Java高級圖像處理)這個官方的Sun(現在的Oracle)圖像庫來做到這一點。
ColorQuantizerDescriptor顯示了您可以應用的量化過程的選擇。
+0
你有一些示例代碼? http://stackoverflow.com/questions/15312921/how-to-use-colorquantizerdescriptor –
相關問題
- 1. 如何將BufferedImage RGBA轉換爲BufferedImage RGB?
- 2. 如何將Graphics2D轉換爲BufferedImage?
- 3. 如何將BufferedImage轉換爲javaxt.io.Image?
- 4. 如何將BufferedImage轉換爲AVI?
- 5. 如何將JLabel.getIcon()轉換爲BufferedImage
- 6. 將UIImage轉換爲8位
- 7. 將BufferedImage轉換爲aws ... rekognition.model.Image
- 8. 將ImageIcon轉換爲BufferedImage
- 9. 將ByteArrayOutputStream轉換爲BufferedImage
- 10. 將BufferedImage轉換爲OpenCv Mat
- 11. 將com.lowagie.text.Image轉換爲BufferedImage
- 12. PHP,將UTF-8轉換爲ASCII 8位
- 13. 如何將BufferedImage(RGB)轉換爲BufferedImage(ARGB或RGBA)?
- 14. 將8位int轉換爲32位
- 15. DICOM將16位轉換爲8位
- 16. 如何將8位字節轉換爲6位字符?
- 17. 如何將24位RGB轉換爲8位RGB
- 18. VHDL如何將32位變量轉換爲4 x 8位std_logic_vector?
- 19. 如何將8位OpenCV IplImage *轉換爲32位IplImage *?
- 20. 如何將VHDL中的8位轉換爲16位?
- 21. 如何將BufferedImage轉換成圖像?
- 22. 將JPEG轉換爲8位BMP
- 23. 將RGB565轉換爲灰度(8位)
- 24. 將8位顏色轉換爲RGB值
- 25. 如何從BufferedImage創建8位PNG?
- 26. 將8位無符號PCM轉換爲8位帶符號PCM
- 27. 轉換爲8位灰度
- 28. 將Image對象轉換爲BufferedImage對象
- 29. 將BufferedImage轉換爲OpenCV中的Mat
- 30. 將Graphics2D轉換爲圖像或BufferedImage
你可能必須選擇一個量化算法,即。將圖像的顏色範圍轉換爲256個入口調色板。 – PhiLho
將圖像的顏色轉換爲8位是什麼意思?我想你想減少色彩空間?你想要執行彩色量化嗎? – Behe
你們能指點我一個圖書館/ API的某種?我不知道你在說什麼。這也聽起來像我可以創建我自己的調色板,如果可能的話,這將是更好的事件。 –