Аппаратное ускорение растрового рисования в Java
Я хочу иметь возможность рисовать последовательные растровые изображения (типа BufferedImage.TYPE_INT_RGB) видео как можно быстрее в Java. Я хочу знать лучший метод в этом. У кого-нибудь есть совет, с чего мне начать? Из того, что я прочитал, есть 2 варианта: 1) Использовать процедуры GDI/GDI+ в dll JNI, работающем с JAWT (я в Windows). 2) Использовать Java3D, применять текстуры к лицу бокса и поворачивать его к камере.
Мне интересно любые советы на эти темы, а также любые другие. Я сделал приличный объем программирования GDI/GDI+ на VB, когда создал элемент управления ActiveX, поэтому использование GDI должно быть безболезненным, но я предполагаю, что Java3D будет больше использовать графический процессор (я могу ошибаться) и повысить производительность. Как вы думаете? GDI и JAWT с моим предыдущим опытом, или начать и новое путешествие по API с Java3D. Заранее спасибо.:)
1 ответ
Чтобы получить плавную анимацию (если это то, что вы хотите получить), вам нужно использовать двойную буферизацию. Для этого вам нужно будет создать новый 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