我希望能够在java中尽可能快地绘制视频的连续位图(类型为BufferedImage.TYPE_INT_RGB)。我想知道这样做的最好方法。谁有什么建议,我应该从哪里开始呢?根据我所读到的,有两个选项: 1)在JNI dll中使用GDI/GDI+例程处理JAWT (Windows上的Im) 2)使用Java3D并将纹理应用到盒子的表面并将其旋转到相机上
我对这些话题以及其他话题的任何建议都很感兴趣。当我创建ActiveX控件时,我已经在VB中做了相当多的GDI/ GDI +编程,所以使用GDI应该是不痛苦的,但我猜测Java3D会更多地利用GPU (我可能是错的),并提供更好的性能。你认为如何?GDI和JAWT结合我以前的经验,或者用Java3D开始新的API之旅。提前谢谢。:)
发布于 2010-11-15 04:48:13
要获得一个流畅的动画(如果它是你想要的),你需要使用双缓冲。为此,您需要为要显示的每个帧创建一个新的java.awt.Image (或一个子类,如BufferedImage,或者如果您想要OpenGL加速处理,则创建VolatileImage)。如果您尚未执行此操作,请调用Image.getGraphics()以获取java.awt.Graphics对象(在将内容添加到图像时也很有用)。最后,当您完成隐藏图像时,调用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
https://stackoverflow.com/questions/4178907
复制相似问题