尝试在unix中写入bmp单色文件时出错
我正在使用java在unix中创建和保存单色位图但是当我尝试使用以下方法保存它时:
ImageIO.write(image, "Microsoft Windows BMP", new File(resImagePath))
保存一个完整的黑色文件并抛出IOException:
http://i57.tinypic.com/2re6pv5.png
java verion是1.4.2
支持的格式如图所示
文件已创建,但全黑或全白
完整代码:
final BufferedImage image = new BufferedImage(1016, 648, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = image.createGraphics();
g.setColor(Color.white);
g.fillRect(0,324,1016,648);
g.setColor(Color.black);
g.drawString("Text Here", 100, 100);
gnu.javax.imageio.bmp.BMPImageWriterSpi bmp_writer = new gnu.javax.imageio.bmp.BMPImageWriterSpi();
bmp_writer.getWriterInstance();
registry.registerServiceProvider(bmp_writer);
if (ImageIO.write(image, "Microsoft Windows BMP", new File(resImagePath)))
System.out.println("ok");
else {
String names[] = ImageIO.getWriterFormatNames();
for (int i = 0; i < names.length; i++)
System.out.println("writer " + names[i]);
}
答案 0 :(得分:1)
使用bmp
代替Microsoft Windows BMP
ImageIO.write(image, "bmp", new File(resImagePath));
本身,ImageIO
不会修改图像数据(超出格式要求),要生成单色图像,您需要自己转换图像数据,例如......
try {
BufferedImage master = ImageIO.read(new File("source image"));
BufferedImage blackWhite = new BufferedImage(master.getWidth(), master.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g2d = blackWhite.createGraphics();
g2d.drawImage(master, 0, 0, this);
g2d.dispose();
ImageIO.write(blackWhite, "bmp", new File("Test.bmp"));
} catch (IOException exp) {
exp.printStackTrace();
}
以上代码生成以下输出...
<强>更新强>
您的代码中还会有更多内容然后遇到眼睛,例如,这有效...
final BufferedImage image = new BufferedImage(200, 200, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = image.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 200, 200);
g.setColor(Color.BLACK);
g.drawRect(0, 0, 199, 199);
FontMetrics fm = g.getFontMetrics();
g.drawString("Text Here", 0, fm.getAscent());
g.dispose();
try {
ImageIO.write(image, "BMP", new File("test.bmp"));
} catch (IOException ex) {
Logger.getLogger(TestTextImage.class.getName()).log(Level.SEVERE, null, ex);
}
但是在你的代码中,你正在做......
g.setColor(Color.white);
g.fillRect(0,324,1016,648);
只填充您的1016x648
)图像的一部分...
但是你呢......
image_graphic.setColor(Color.black);
image_graphic.drawString("Text Here", 100, 100);
我不知道image_graphic
指的是什么......
永远不应该有任何理由直接实例化ImageWriter
,这是ImageIO
答案 1 :(得分:0)
一些问题解决了。
我编辑BMPImageWriter.java文件和方法write()。
评论关闭流的最后一行
//out.close();
已完成,但当我使用 TYPE_BYTE_BINARY
时,系统仍会打印全黑图像final BufferedImage image = new BufferedImage(1016, 648, BufferedImage.TYPE_BYTE_BINARY);
如果我使用 TYPE_INT_RGB 或任何彩色格式,它将保存正确,我生气:((