Tôi đã nhìn vào lớp ImageConverter, cố gắng tìm ra cách để chuyển đổi một BufferedImage thành màu 8-bit, nhưng tôi không có ý tưởng làm thế nào tôi sẽ làm điều này. Tôi cũng đang tìm kiếm trên internet và tôi không thể tìm thấy câu trả lời đơn giản, tất cả họ đều nói về hình ảnh màu xám 8 bit. Tôi chỉ đơn giản muốn chuyển đổi màu sắc của một hình ảnh thành 8 bit ... không có gì khác, không thay đổi kích thước không có gì. Có ai tâm trí cho tôi biết làm thế nào để làm điều này.Làm thế nào để chuyển đổi BufferedImage thành 8 bit?
Trả lời
này đoạn mã từ bài viết "Transparent gifs in Java" at G-Man's Uber Software Engineering Blog hoạt động tốt:
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);
}
Làm việc tuyệt vời, chỉ cần loại bỏ phần trong suốt. –
Bạn có thể sử dụng JAI (Java Advanced Imaging), thư viện ảnh chính thức của Sun (nay là Oracle) để thực hiện điều đó.
ColorQuantizerDescriptor cho biết lựa chọn quy trình lượng tử hóa mà bạn có thể áp dụng.
Bạn có một số mã mẫu? http://stackoverflow.com/questions/15312921/how-to-use-colorquantizerdescriptor –
- 1. Làm thế nào để chuyển đổi một OpenCV IplImage 8-bit * thành IplImage 32-bit *?
- 2. Làm thế nào để chuyển đổi một byte thành bit?
- 3. Làm cách nào để chuyển đổi các byte 8 bit thành các ký tự 6 bit?
- 4. Làm thế nào để chuyển đổi 8 bit đến 16 bit trong VHDL?
- 5. Chuyển đổi ImageIcon thành BufferedImage
- 6. Làm cách nào để chuyển đổi bit thành byte?
- 7. Làm cách nào để chuyển đổi màu RGB thành màu 8-bit khớp gần nhất?
- 8. Chuyển đổi Graphics2D thành một hình ảnh hoặc BufferedImage
- 9. Chuyển đổi byte thành bit trong python
- 10. Làm thế nào để chuyển đổi chuỗi thành bitet?
- 11. Làm thế nào để chuyển đổi một chuỗi UTF-8 thành Unicode?
- 12. Làm thế nào để chuyển đổi mã ký hiệu unicode javascript thành utf-8?
- 13. Làm thế nào để chuyển đổi một tệp thành utf-8 bằng Python?
- 14. Làm thế nào để chuyển đổi UTF-8 std :: chuỗi thành UTF-16 std :: wstring?
- 15. Chuyển đổi một BufferedImage đến một loại
- 16. Chuyển đổi byte Python thành "số nguyên 8 bit không dấu"
- 17. Làm thế nào để chuyển đổi NSData thành NSString?
- 18. Chuyển đổi Byte Array thành bit Array?
- 19. Làm thế nào để chuyển đổi char thành chuỗi?
- 20. typecasting Implicit trong C (Chuyển đổi 32 bit unsigned để 8 bit u int)
- 21. cách chuyển đổi hai byte thành một số 16 bit?
- 22. Tải 8 bit uint8_t thành uint32_t?
- 23. Chuyển đổi độ sâu 16 bit CvMat * sang độ sâu 8 bit
- 24. PIL: Chuyển đổi hình ảnh RGB thành bảng màu 8 bit cụ thể?
- 25. Chuyển đổi hình ảnh Bayer 12 bit sang RGB 8 bit bằng cách sử dụng OpenCV
- 26. sox để chuyển đổi tệp flac thành 320 bit mp3
- 27. Làm thế nào để bạn sao chép một BufferedImage
- 28. Làm cách nào để chuyển đổi chuỗi UTF-8 thành một mảng các byte trong Dart?
- 29. Chuyển đổi phương trình thành hoạt động dịch chuyển bit
- 30. Làm cách nào để chuyển đổi tệp đầu vào thành mã hóa UTF-8 trong Perl?
Bạn có thể phải chọn một thuật toán lượng tử, tức là. một cái gì đó mà chuyển đổi phạm vi màu sắc của hình ảnh của bạn thành một bảng mục nhập 256. – PhiLho
Ý của bạn là gì khi chuyển đổi màu của hình ảnh thành 8-bit? Tôi đoán bạn muốn giảm không gian màu? Bạn có muốn thực hiện lượng tử hóa màu? – Behe
Các bạn có thể chỉ cho tôi một thư viện/API thuộc loại nào đó không? Tôi không biết bạn đang nói về cái gì. Điều đó cũng có vẻ như tôi sẽ có thể tạo bảng màu của riêng tôi mà sẽ là sự kiện tốt hơn nếu có thể. –