我正在尝试将BufferedImage写入jpeg文件,但是我的Java程序引发了异常。我能够成功将相同的缓冲区保存为gif和png。我尝试在Google上四处寻找解决方案,但无济于事。
码:
File outputfile = new File("tiles/" + row + ":" + col + ".jpg"); try { ImageIO.write(mapBufferTiles[row][col], "jpg", outputfile); } catch (IOException e) { outputfile.delete(); throw new RuntimeException(e); }
例外:
Exception in thread "main" java.lang.RuntimeException: javax.imageio.IIOException: Invalid argument to native writeImage at MapServer.initMapBuffer(MapServer.java:90) at MapServer.<init>(MapServer.java:24) at MapServer.main(MapServer.java:118) Caused by: javax.imageio.IIOException: Invalid argument to native writeImage at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method) at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1055) at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:357) at javax.imageio.ImageWriter.write(ImageWriter.java:615) at javax.imageio.ImageIO.doWrite(ImageIO.java:1602) at javax.imageio.ImageIO.write(ImageIO.java:1526) at MapServer.initMapBuffer(MapServer.java:87) ... 2 more
OpenJDK没有本地JPEG编码器,请尝试使用Sun的JDK或使用库(例如JAI)
AFAIK,关于“粉红色色调”,Java将JPEG保存为ARGB(仍然具有透明度信息)。大多数观看者在打开时都假定四个通道必须对应于CMYK(而不是ARGB),因此对应于红色。
但是,如果将图像导入回Java,则透明度仍然存在。