簡體   English   中英

Java無法在Unix中寫入BMP圖像

[英]java failed to write bmp image in unix

嘗試在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不會修改圖像數據(超出格式要求),要生成單色圖像,您將需要自己轉換圖像數據,例如...

單色

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

一些問題解決了。

我編輯BMPImageWriter.java文件和方法write()。

評論了關閉流的最后一行

//out.close();

完成,但是當我使用TYPE_BYTE_BINARY時,系統仍會打印全黑圖像

final BufferedImage image = new BufferedImage(1016, 648, BufferedImage.TYPE_BYTE_BINARY);

如果我使用TYPE_INT_RGB或任何彩色格式,它將保存正確,我正在生氣:((

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM