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

Я использую JGraphX ​​для диаграмм рабочих процессов разного размера. Я столкнулся с проблемой, заключающейся в том, что при попадании в определенное количество ячеек метод mBeCrellRenderer 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

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

1 ответ

Может быть, вы могли бы попытаться установить antialias к false. Это подходит для меня.

Другие вопросы по тегам