Я пытаюсь удвоить буфер изображения, содержащего многоугольник, в методе paint()
с использованием AWT. Используя объект Image
для процесса буферизации, я установил черный фон изображения, нарисую многоугольник на изображение, а затем нарисую буферное изображение на экране. Затем я вызываю repaint()
, чтобы сделать изображение снова.Непрерывное двойное буферное решение не работает
К сожалению, я по-прежнему получаю артефакты при перекраивании изображения. Что я делаю неправильно?
EDIT: Как примечание стороны, я использую Java 8. EDIT 2: Я звоню repaint()
в paint()
, потому что нужно непрерывно буфер изображения. Полигон предназначен для перевода по экрану, основанного на пользовательском вводе.
import java.applet.Applet;
import java.awt.*;
public class DoubleBuffer extends Applet {
int xSize = 900;
int ySize = 600;
Image bufferImage;
Graphics bufferG;
@Override
public void init() {
this.setSize(xSize, ySize);
//Double buffering related variables
bufferImage = this.createImage(xSize, xSize);
bufferG = bufferImage.getGraphics();
}
//BUFFERING DONE HERE
@Override
public void paint(Graphics g){
//drawing images to external image first (buffering)
bufferG.setColor(Color.BLACK);
bufferG.fillRect(0,0,xSize,ySize);
bufferG.setColor(Color.WHITE);
bufferG.drawRect(100, 100, 100, 100);
//draw the image and call repaint
g.drawImage(bufferImage, 0, 0, this);
repaint();
}
}
Любая причина * не * использовать легкие компоненты (например, JPanel), которые по умолчанию двойной буферизации? (Я бы рекомендовал * not * вызов 'repaint' в методе' paint') – copeg
Как это ни странно, я застрял в использовании компонентов Heavyweight (то есть только в окне) из-за определенных ограничений API, за которыми я следую за работа (пожалуйста, медведь со мной). Если все остальное не удастся, я пойду дальше и использую легкий компонент. Я собираюсь начать еще немного исследований, но что не так с помощью repaint() в paint()? Где еще я должен повторно отобразить свой образ? –
P.S. это работа, связанная с образованием, в которой рендеринг изображений составляет небольшую часть. У меня мало опыта в этой области. –