Как создать большое BufferedImage из метода JGraphX ​​(mxGraph)?

Я использую JGraphX ​​для построения диаграмм рабочих процессов разного размера. Я столкнулся с проблемой: как только я попал в определенное количество ячеек, метод mxCellRenderer createBufferedImage() завершается с ошибкой OutOfMemoryError. JGraphX ​​правильно отображает диаграмму в Swing JFrame, независимо от того, правильно она сохраняется или нет.

Есть ли известный обходной путь или модификация класса и/или методов, позволяющие использовать большие изображения?

Пример кода:

public void generatePNG() throws IOException {
    BufferedImage image = mxCellRenderer.createBufferedImage(graph, null, 1, Color.WHITE, true, null);
    ImageIO.write(image, "PNG", new File(path + "-" + name + ".png"));
}

Полученная трассировка стека:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(Unknown Source)
at java.awt.image.Raster.createPackedRaster(Unknown Source)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
at java.awt.image.BufferedImage.<init>(Unknown Source)
at com.mxgraph.util.mxUtils.createBufferedImage(Unknown Source)
at com.mxgraph.util.mxUtils.createBufferedImage(Unknown Source)
at com.mxgraph.canvas.mxImageCanvas.<init>(Unknown Source)
at com.mxgraph.canvas.mxImageCanvas.<init>(Unknown Source)
at com.mxgraph.util.mxCellRenderer$1.createCanvas(Unknown Source)
at com.mxgraph.util.mxCellRenderer.drawCells(Unknown Source)
at com.mxgraph.util.mxCellRenderer.createBufferedImage(Unknown Source)
at com.mxgraph.util.mxCellRenderer.createBufferedImage(Unknown Source)

Этот же метод отлично работает для «меньших» диаграмм (включая некоторые довольно большие), но как только он достигает определенного предела, никакое увеличение пространства кучи не помогает.

Единственный другой вопрос, связанный с этим, который я нашел, - это более старый вопрос, на который действительно не было удовлетворительного ответа: Jgraphx не хватает памяти - Java

Любая помощь будет оценена по достоинству!


person Michael Coxson    schedule 10.07.2017    source источник
comment
Возможный дубликат Как увеличить объем памяти JVM?   -  person Leonardo Alves Machado    schedule 10.07.2017
comment
никакое увеличение пространства в куче не помогает. Вот моя текущая конфигурация JVM: -Xms512m -Xmx8192m   -  person Michael Coxson    schedule 11.07.2017
comment
Из любопытства, с каким эмпирическим порогом размера в пикселях вы столкнулись? Любой способ сделать его более плотно упакованным изображение, например TYPE_BYTE_BINARY или TYPE_BYTE_INDEXED? Подробнее здесь.   -  person trashgod    schedule 11.07.2017
comment
Я решил пойти по другому пути и автоматически обрезать диаграмму, если ее mxRectangle превышает определенные границы, и отображать объекты верхнего уровня в виде отдельных диаграмм. После определенного момента огромная диаграмма все равно становится неуправляемой, так что, возможно, это и к лучшему.   -  person Michael Coxson    schedule 11.07.2017