我已经问过如何保存大图像的问题,我认为我走在正确的轨道上,但我仍然需要一些建议。
我有一个 12000 x 12000 的图像,我需要将其另存为 .png
无法使用 BufferedImage。
我已经被建议使用 RenderedImage 接口,但不知何故我无法获得所需的结果。 (我还没有使用过光栅,所以可能我弄错了)
保存图片方法代码:
public static void SavePanel() {
PanelImage IMAGE = new PanelImage(panel);
try {
ImageIO.write(IMAGE, "png", new File(ProjectNameTxt.getText() + ".png"));
} catch (IOException e) {
}
}
以及 PanelImage 类的代码:
public static class PanelImage implements RenderedImage {
// some variables here
public PanelImage(JImagePanel panel) {
this.panel = panel;
}
public Raster getData(Rectangle rect) {
sizex = (int) rect.getWidth();
sizey += (int) rect.getHeight();
image = null;
image = new BufferedImage(
(int) sizex,
(int) sizey,
BufferedImage.TYPE_INT_RGB);
g2 = image.createGraphics();
panel.paintComponent(g2);
return image.getData();
}
// rest of the implemented methods - no problems here
}
我注意到 ImageIO 一次请求一行像素(12000 x 1)。
此方法有效,但我仍然需要 BufferedImage 中的整个图像。
每次 ImageIO 调用该方法时,我都必须增加 BImage 的大小,否则我会得到“坐标超出范围!”异常
Thanks
This PNGJ http://code.google.com/p/pngj/库对于读取/写入巨大图像非常有用,因为它是按顺序执行的,一次只在内存中保留一行。 (前段时间自己写的,因为我也有类似的需求)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)