Java中的专用绘图表面?

时间:2013-08-06 08:05:54

标签: java performance drawing 2d surface

我想在Java中进行高效的2D绘图。我希望有一些我可以自由绘制的表面,而不必让视图层次结构遍历和更新,这可能会导致口吃。

我最初使用过JPanel并调用了repaint(),但我发现它不是最佳的(这就是我要求的原因)。我最接近的是Android的SurfaceView,它给了我一个专用的绘图表面。

要实现此专用绘图表面,我是否需要使用OpenGL或是否有任何等效的SurfaceView

1 个答案:

答案 0 :(得分:4)

如果您不需要加速图形,则可以使用BufferedImage绘制到Graphics2D。在BufferedImage中获得数据后,您只需将BufferedImage绘制到组件上即可。这样可以避免你所说的任何闪烁。

创建BufferedImage非常简单:

int w = 800;
int h = 600;
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

然后你可以用图形上下文(可能在你自己的渲染函数中)绘制对象:

Graphics2D g = bi.createGraphics();
g.drawImage(img, 0, 0, null);
//img could be your sprites, or whatever you'd like
g.dipose();//Courtesy of MadProgrammer
//You own this graphics context, therefore you should dispose of it.

然后,当您重新绘制组件时,将BufferedImage绘制为一个整体:

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(bi, 0, 0, null);
}

有点像使用BufferedImage作为后台缓冲区,然后一旦完成绘制,就将它重新绘制到组件上。