Промежуточное изображение - PullRequest
0 голосов
/ 28 июля 2011

У меня проблема с промежуточным изображением.Изображение показывается только один раз.После перемещения изображения «линия» больше не отображается.

public void paintLine(Graphics g) {
    if (line == null) {
        line = new BufferedImage(1, height, BufferedImage.TYPE_INT_ARGB);

        Graphics gImg = line.getGraphics();
        float[] data = datas[index];
        for (float f : data) {
            float[] rgb = ColorMap.getPixelColor(f);
            gImg.setColor(new Color(rgb[0], rgb[1], rgb[2]));
            gImg.drawRect(0, (int)yPos--, 1, 1);
        }
        gImg.dispose();
    }
    xIncr++;
    g.drawImage(line, (int)xPos - xIncr, (int)yPos, null);
    graph.repaint();
}

Этот метод вызывается в paintComponent ofJPanel.Если я каждый раз воссоздаю изображение «линия», оно отображается правильно с очень низкой производительностью.

1 Ответ

0 голосов
/ 08 августа 2011

Эмм ... Я не совсем уверен из-за меньшего количества информации в вашем вопросе, но, как правило, изображение может исчезнуть из-за опции doubleBuffered (false). Таким образом, вам нужно установить параметр двойной буферизации на true вручную для вашего холста. Код что-то вроде этого

public class MyLabel extends JLabel{


public MyLabel()
{

this.setDoubleBuffered(true);

}

public void paintComponent(Graphics g)
{
  this.paintLine(g);
}

public void paintLine(Graphics g) {
    if (line == null) {
        line = new BufferedImage(1, height, BufferedImage.TYPE_INT_ARGB);

        Graphics gImg = line.getGraphics();
        float[] data = datas[index];
        for (float f : data) {
            float[] rgb = ColorMap.getPixelColor(f);
            gImg.setColor(new Color(rgb[0], rgb[1], rgb[2]));
            gImg.drawRect(0, (int)yPos--, 1, 1);
        }
        //gImg.dispose();
    }
    xIncr++;
    g.drawImage(line, (int)xPos - xIncr, (int)yPos, null);
    graph.repaint();
}
}

Теперь я думаю, что концепция более ясна

Удачи

...