2009-02-01 35 views
3

我正在研究Java 2D渲染程序(在1.6.0_11上運行),該程序使用外部圖像進行UI渲染。這些大圖像同時包含幾個UI圖形部分,現在我使用BufferedImage.getSubimage()提取這些部分。假設平均桌面系統(有或沒有啓用的DirectX/OpenGL加速),我的問題是:BufferedImage的getSubimage性能

  • 的getSubimage()是一個內存高效的呼叫,因爲它共享底層的圖像數據,但是這並不影響渲染這些子圖像與Graphics2D.drawImage()的速度?
  • 如果圖像使用8位每像素調色板模式,使用RGBA模式(例如4x內存)或依賴調色板顏色模型(例如轉換時間)的增益/損耗是多少?
+0

事實證明,這有點灰色地帶。如果未使用DirectX管道,則每次提取子圖像需要多一點時間,而不是具有單獨的子圖像圖像。如果圖像是需要特殊座標系進行渲染的圖塊,則差異很明顯。 DirectX開啓後,BufferedImage將成爲託管映像 - 位於視頻內存中 - 並利用卡硬件支持。在這種情況下,子圖像和非子圖像之間沒有顯着差異。 – akarnokd 2009-05-01 08:05:44

回答

1

據我所知,getSubimage(...)應該不會對渲染有任何顯着的影響。

轉換圖像數據很慢,通常最好避免在飛行中進行。


帶圖像緩慢可分爲兩大類:

  • 磁盤I/O
  • 數據處理

和磁盤I/O可以很容易地最慢的部分。

如果您打算僅使用圖像的一部分,最好能夠從磁盤加載部分圖像。

我的經驗是,JAI比只使用標準庫的東西更好。

+0

這不是磁盤I/O時間,因爲源映像已完全加載到內存中。這個合成圖像的樣本可以在http://karnokd.uw.hu/open-ig-starmap.png看到。所有UI圖形組件都是從這種圖像中提取的。 – akarnokd 2009-02-10 07:29:31