2012-05-23 2 views
4

Я показываю изображение в Swing. Я рисую поверх изображения (куча drawRect() звонков) и обновляет экран. Изображение постоянное, но объекты, нарисованные сверху, не являются. Есть ли способ избежать перерисовки изображения в любое время? Так как графическая карта, вероятно, отображает изображение, можно ли предположить, что вызовы drawRect() являются узким местом? Я рисую целых 20 000 вызовов кадра (но обычно не более 3000).Оптимизация отображения поворотного изображения

Редактировать: Это действительно прямые вызовы, которые замедляют его, и его можно сделать значительно быстрее, удалив канал прозрачности. При этом было бы неплохо ускорить его и включить прозрачность. Код не может быть проще, поэтому я надеюсь, что он сделает что-то другое, это поможет.

public void paintComponent(Graphics g) { 
    super.paintComponent(g) ; 
    //grid or walkers 
    g.drawImage(image, 0, 0, null); 

    for(Walker w : walkArray){ 
     g.setColor(new Color(255,255-w.data[3], 0, w.data[2])); 
     g.drawRect(w.data[0], w.data[1], 1, 1); 
    }  
} 
+0

Можете ли вы опубликовать свой метод рисования? –

+3

Опубликуйте код, и даже лучше, опубликуйте [SSCCE] (http://sscce.org). –

+0

Отображается ли изображение в BufferedImage? Снова без кода мы здесь. –

ответ

2

Это из контекста, но вы можете LookUp цвета в палитре предвычисленной вместо создания экземпляра Color в каждом цикле? Возможно, это может немного улучшить производительность.

Редактировать: Например, List<Integer> используется в качестве таблицы поиска RGB here и Queue<Color> используется here.

+1

+1 @Chet: стоит попробовать; профиль. – trashgod

Смежные вопросы