2014-01-05 51 views
2

是什麼使一個緩衝圖像,並使用它的像素畫的區別:的BufferedImage像素Vs的Graphics.drawImage

private BufferedImage img; 
private int[] pixels; 

pixels = ((DataBufferInt) img.getRaster().getDataBuffer()); 

而且只使用一個形象的

img 

變量並實現IMG的圖形做:

img.getGraphics().drawImage(/*image*/, x, y, observer); 

編輯:

這是遊戲開發!

回答

5

優點:

  • 它通常簡單使用現成的更高級別的操作,如drawImage
  • 您可能會受益於硬件加速上/最佳化一些平臺
  • 它相對工作獨立的底層的下降到像素緩衝器水平NG圖像格式

優點:

  • 它可以用於非常專門目的,例如是有用產生從某種式/計算的(I使用此技術來生成自定義的顏色梯度,例如)每個像素
  • 它可以是略微更快個別像素操作(但可能對於像批量操作慢drawImage,因爲你沒有得到硬件加速)

如果只是普通的遊戲渲染畫面,我想說的Graphics路線可能是最好的。如果你正在做一些像動態圖像生成的事情,那麼像素緩衝區路由就值得探索。

4
  • 使用getGraphics()提供了一種可靠的方法來繪製圖像,而不管其基礎結構如何。
  • 請注意,您不應該通過鏈接來執行此操作,因爲您演示的是:img.getGraphics().drawImage(/*image*/, x, y, observer);,因爲這不允許您在完成該操作後丟棄Graphics對象,否則將導致資源耗盡。
  • 直接操縱你的柵格位可能是改變事情的一種更快的方法,但我相信你如何做到這一點取決於你正在使用的BufferedImage的類型。經由Graphics方法去
+0

這個和@ mikera的答案都很好,似乎贊成'drawImage()'。我喜歡這個答案,因爲它提到了'dispose()'問題,這很重要。也許值得一提的是,直接訪問光柵/數據緩衝區就像在OP中一樣,可能會禁用圖像實例的生命週期(!)的sw/hw優化,請謹慎使用。而且每當有疑問時,簡介。 :-) – haraldK

相關問題