问题:
使用BufferedImage保存处理的图片,是24位的,发送到LED显示屏上显示效果很差,需要调整为16色再下发。
分析:
调整BufferedImage构造函数中的RGB类型,依旧无果;原因在于缺少调色板参数
方法:
在构造BufferedImage前,先设置好调色板信息。
具体代码如下:
// 图片大小 final int img_width = 96; final int img_height = 32; //16色BMP调色板 final int img_bits = 4; final byte[] colorTable_16 = { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x80, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x80, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x80, (byte) 0x80, (byte) 0x00, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0x00, (byte) 0xff, (byte) 0x00, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00 }; final IndexColorModel color_model = new IndexColorModel(img_bits , colorTable_16.length / img_bits, colorTable_16 , 0, true); // 构造图片对象 BufferedImage image = new BufferedImage(img_width, img_height, BufferedImage.TYPE_BYTE_BINARY, color_model);
// 获取Graphics2D对象,随后在其上绘画 Graphics2D graphics = image.createGraphics(); ....
// 输出到文件
ImageIO.write(image, "bmp", new File(...));