【问题标题】:Hardware accelerate bitmap drawing in java硬件加速java中的位图绘制
【发布时间】:2010-11-20 07:31:18
【问题描述】:

我希望能够在 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 之旅。 提前致谢。 :)

【问题讨论】:

  • 我从标签中删除了 Java 3D,因为它不相关,并添加了 gpu 和 java 2D。

标签: java video gdi gpu java-2d


【解决方案1】:

要获得流畅的动画(如果它是您想要的),您需要使用双缓冲。为此,您需要为要显示的每一帧创建一个新的 java.awt.Image(或类似 BufferedImage 的子类,或者如果您想要 OpenGL 加速处理,则为 VolatileImage)。如果您还没有这样做,请调用 Image.getGraphics() 以获取 java.awt.Graphics 对象(也可用于将您的内容添加到图像)。最后,当你隐藏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

【讨论】:

  • 感谢您的输入和链接!我要研究易失性图像。
  • Windows 上的 Java 最新版本现在正在使用 DirectX 管道。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 2012-12-11
  • 2016-07-28
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
相关资源
最近更新 更多