2016-07-04 8 views
0

Я хочу показать изображение (в JPanel), которое должно быстро обновляться (около 30 кадров в секунду). Я также хочу, чтобы мое использование процессора было как можно более низким.Самый эффективный способ визуализации динамического изображения

Каждое обновление изображения будет состоять либо из:

  • Перемещение блока пикселей на новое место
  • Замена блока пикселов с новым блоком

Первое решение, которое было на ум было что-то вроде этого:

private BufferedImage screen; 

public void runBlockUpdate(int x, int y, int pieceWidth, int pieceHeight byte[] piece){ 
    ImageIcon imgPiece = new ImageIcon(piece); 
    Graphics2D g = screen.createGraphics(); 
    g.drawImage(imgPiece.getImage(), x, y, pieceWidth, pieceHeight, null); 
    repaint(); 
} 

@Override 
public void paintComponent(Graphics g) { 
    g.drawImage(screen, 0, 0, (int) (screenRect.width * screenScale), (int) (screenRect.height * screenScale), this); 
} 

Мое основное выступление Что касается метода paint(). Я хочу знать, есть ли более эффективные способы сделать это, прежде чем полностью реализовать эту технику.

+1

Рассмотрим 'TexturePaint', видели [здесь] (http://stackoverflow.com/a/16880714/230513) и [здесь] (http://stackoverflow.com/a/24746585/230513). – trashgod

+1

paint: «Swing-программы должны переопределять' paintComponent() 'вместо переопределения' paint() '." - [* Живопись в AWT и Swing: методы Paint *) (http://www.oracle.com/technetwork/ Java/живопись-140037.html # обратных вызовов). – trashgod

ответ

0

Вы можете попробовать использовать качели timer вызов способа обновления (JFrame.repaint()) каждый 30millisec