硬件加速java中的位图绘制

时间:2010-11-14 18:21:37

标签: java video gdi gpu java-2d

我希望能够在java中尽快绘制视频的连续位图(类型为BufferedImage.TYPE_INT_RGB)。我想知道这样做的最佳方法。有没有人有任何建议我应该从哪里开始?根据我的阅读,有两个选项: 1)在使用JAWT的JNI DLL中使用GDI / GDI +例程(我在Windows上) 2)使用Java3D并将纹理应用于Box的脸部并将其旋转到相机

我对这些主题以及其他任何主题的任何建议都很感兴趣。 当我创建一个ActiveX控件时,我在VB中做了大量的GDI / GDI +编程,所以使用GDI应该是轻松的,但我猜Java3D会更多地利用GPU(我可能是错的)并提供更好的性能。你怎么看? GDI和JAWT与我以前的经验,或者与Java3D一起开始和新的API之旅。 提前致谢。 :)

1 个答案:

答案 0 :(得分:4)

要获得流畅的动画(如果你想获得),你需要使用双缓冲。为此,您需要为要显示的每个帧创建一个新的java.awt.Image(或类似BufferedImage的子类,或者如果您想要OpenGL加速处理,VolatileImage)。如果您还没有这样做,请调用Image.getGraphics()以获取java.awt.Graphics对象(对于将您的内容添加到Image中也很有用)。最后,当您隐藏Image完成时,请调用Graphics.draw()以平滑地替换当前显示。

VolatileImage加速OpenGL并且速度更快。当调用VolatileImage.getGraphics()时,它实际上返回一个Graphics2D,它也是加速图形管道的一部分。

适用于Windows,Linux和Solaris,但您需要为显卡安装OpenGL驱动程序。

一些额外的参考:

加速图形管道:

http://download.oracle.com/javase/1.5.0/docs/guide/2d/new_features.html

http://www.javalobby.org/forums/thread.jspa?threadID=16840&tstart=0

双缓冲:

http://www.java2s.com/Code/Java/2D-Graphics-GUI/Smoothmoveusingdoublebuffer.htm

http://www.heatonresearch.com/articles/23/page2.html

http://www.javacooperation.gmxhome.de/BildschirmflackernEng.html