2013-08-01 2 views
0

У меня есть приложение, которое отображает изображения на JPanel. Я хочу полностью отказаться от GUI, так что приложение вызывается только из кода, без пользовательского интерфейса, и поэтому изображения сохраняются только в файле gif.save bufferedimage to gif

Я экспериментировал с кодом от this question, и, похоже, работает нормально, когда я вызываю код сохранения gif из старого графического интерфейса. Тем не менее, код сохранения gif не работает, когда я удаляю GUI, и мне интересно, может ли это быть из-за того, что JPanel, который он пытается распечатать, на самом деле не попал в контейнер GUI, например JFrame и т. Д.

Причина, по которой я не размещаю код, заключается в том, что он слишком многословный, я просто прошу простую, исчерпывающую форму ответа.

Я экспериментировал с writeablerasters для других приложений. Но для этого приложения потребуется основной проект перекодирования, который рисуется с использованием метода graphics.drawLine(). Может ли кто-нибудь предложить эффективный код для создания содержимого «фантомного» JPanel, получить его в BufferedImage, а затем сохранить его как gif, не поставив JPanel в графический интерфейс?

+1

В чем ваше приложение не использует «Графика», полученную из «BufferedImage», которую вы собираетесь сохранить в файле? Разве это не работает? –

+0

Некоторый код был бы хорош – MadProgrammer

ответ

1

Поскольку ваше приложение использует JPanel, ему просто нужен объект Graphics. Вы можете использовать один из BufferedImage, который затем будет сохранен в файле. Пример кода:

BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB); 

Graphics g = image.getGraphics(); 

// Pass this graphics object to your application to perform the drawing   
g.setColor(Color.red); 
g.drawRoundRect(10, 10, 20, 20, 5, 5); 

// save it to disk 
ImageIO.write(image, "png", new File("test.png")); 
0

Это трудно ответить без какого-либо примера кода.

Если компонент, который вы пытаетесь отобразить, не отображается на экране, вполне вероятно, что он не был выложен.

Перед покраской вы должны убедиться, что вы производите размер компонента.

componentToBePainted.setSize(componentToBePainted.getPreferredSize()); 

Вы также должны использовать print или printAll над paint. Когда не привязан к собственному аналоговому партнеру, paint может вызвать проблему

+0

У меня возникли проблемы с созданием трех отдельных списков, каждый из которых имеет разные фильтры одного и того же типа объекта в приложении весеннего спящего режима. У вас есть немного времени, чтобы помочь мне разобраться в решении? Проблема заключается в этой ссылке: http://stackoverflow.com/questions/20292152/parameterizing-object-properties – CodeMed