Я уже задавал вопрос, как сохранить большие изображения, и я думаю, что я на правильном пути, но мне все еще нужен совет.
У меня есть изображение 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.
Я должен увеличивать размер BImage каждый раз, когда ImageIO вызывает метод, в противном случае я получаю исключение «Координировать вне границ!»
Спасибо