gpt4 book ai didi

java在unix下写入bmp图像失败

转载 作者:行者123 更新时间:2023-12-01 12:42:37 25 4
gpt4 key购买 nike

尝试在 unix 中写入 bmp 单色文件时出错

我正在使用java在unix中创建和保存单色位图,但是当我尝试使用以下方法保存它时:

ImageIO.write(image, "Microsoft Windows BMP", new File(resImagePath))

保存一个全黑文件并抛出 IOException:

http://i57.tinypic.com/2re6pv5.png

java版本是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]);
}

最佳答案

使用bmp而不是Microsoft Windows BMP

ImageIO.write(image, "bmp", new File(resImagePath));

就其本身而言,ImageIO不会修改图像数据(超出格式要求),要生成单色图像,您需要自己转换图像数据,例如...

Monochrome

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();
}

上面的代码产生以下输出...

Monochrome

已更新

您的代码中还有更多内容,例如,这有效......

    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);
}

BMP

但是在你的代码中,你正在做...

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

关于java在unix下写入bmp图像失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com