Сохранить графику как изображение? - PullRequest
1 голос
/ 20 июня 2011

Я разрабатываю приложение для BlackBerry с Eclipse и хочу узнать, есть ли способ сохранить изображение, нарисованное с помощью объекта Graphics ... Приложение включает в себя рисование круговой диаграммы с использованием Graphics. В первый раз, когда я открываю экран для отображения диаграммы, но в следующий раз, когда я пытаюсь создать диаграмму, вызывая экран, он становится бесполезным. Поэтому мне было интересно, могу ли я сохранить диаграмму как изображение ... таким образом, у меня не будет продолжать рисовать снова и снова каждый раз, когда я открываю экран ... Пожалуйста, помогите ... Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

Я не знаю API BlackBerry, но вы могли бы по-другому взглянуть на вашу проблему. Вы могли бы сделать закадровый рендеринг. Создайте BufferedImage, получите ссылку на его Graphics объект, выполните рендеринг, а затем сохраните BufferedImage как png, например.

Например:

int width = 200, height = 200;

// TYPE_INT_ARGB specifies the image format: 8-bit RGBA packed
// into integer pixels
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

Graphics2D ig2 = bi.createGraphics();

// Draw your chart

ImageIO.write(bi, "PNG", new File("yourImageName.PNG"));

Таким образом, вы можете сделать все свои рисунки один раз, сохранив их как файл или просто в памяти (зависит от того, что вам нужно), а затем вам просто нужно либо загрузить изображение из файла, либо выполнить g.drawImage () в ваш экран.

Но, как я уже говорил, я не знаю, относится ли это к API Blackberry, оно точно работает с JDK / JRE на рабочем столе.

0 голосов
/ 20 июня 2011

Я понял, что вы используете класс java.awt.Graphics, верно? Убедитесь, что вы рисуете только в потоке событий AWT. Используйте

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
    // YOUR CODE        
  }
});

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

...