中间图像

时间:2011-07-28 12:00:52

标签: swing bufferedimage

我的中间图片有问题。图像仅显示一次。移动后,图像“线”不再显示。

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();
}

此方法在paintPaonent的JPPanel中调用。 如果我每次重新创建图像“线”,它显示正常,性能非常差。

1 个答案:

答案 0 :(得分:0)

嗯......由于你的问题信息较少,我不太确定,但是,由于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();
}
}

现在我觉得概念更清晰

祝你好运