我想在Java中进行高效的2D绘图。我希望有一些我可以自由绘制的表面,而不必让视图层次结构遍历和更新,这可能会导致口吃。
我最初使用过JPanel并调用了repaint(),但我发现它不是最佳的(这就是我要求的原因)。我最接近的是Android的SurfaceView,它给了我一个专用的绘图表面。
要实现此专用绘图表面,我是否需要使用OpenGL或是否有任何等效的SurfaceView
?
答案 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作为后台缓冲区,然后一旦完成绘制,就将它重新绘制到组件上。