[英]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.