2014-05-08 24 views
1

我正在用Java做一個小型遊戲,它使用了像素圖形樣式,有許多精靈16x16或32x32像素。然而,當我轉動他們,我不想沿着側「鋸齒」,所以我用了RenderingHintGraphics2D內插效果不好,很小BufferedImages

RenderingHint.KEY_INTERPOLATION 
RenderingHint.VALUE_INTERPOLATION_BILINEAR 

不幸的是,因爲所使用的許多圖像是非常小的(16×16×16,32×32)所產生的圖像完全無法使用。輸出:

http://imgur.com/a/roRh4

正如你可以看到,小圖形模糊。這是大圖像的預期效果,但對於小圖像來說,這是非常糟糕的。

一個解決方案是提高所有圖形的分辨率,同時保持「塊狀」效果。這將是一個痛苦,那麼是否有另一種方法來調整插值?

非常感謝你們。

+0

你告訴我們鑰匙,但沒有價值。但是,* antialiasing *和* interpolation *的渲染提示值的組合會影響結果,但它也會*取決於其他細節(操作系統,圖形卡+驅動程序...)。此外,對於16x16的圖像,在「塊狀」和「模糊」之間沒有太多的...但是如果沒有人嘗試答案,也許我會做一些實驗並比較結果。 – Marco13

+0

@ Marco13值爲RenderingHints.VALUE_INTERPOLATION_BILINEAR。 32×32圖像在屏幕上呈現約256×256。問題是如果我可以使插值處理小圖像,就好像它是在屏幕上的大小。 – Zee2

+0

在不提高圖形文件的分辨率的情況下,是不是可以在加載後將它們縮小一些,然後旋轉它?將它們與最近的鄰居放在一起以保留塊,然後使用雙線性旋轉 – schmop

回答

0

高檔你的小圖片並使用它:

BufferedImage tiny = ImageIO.read(new File("...")); 
BufferedImage bigger = new BufferedImage(tiny.getWidth()*10, tiny.getHeight()*10, tiny.getType()); 
Graphics2D g = bigger.createGraphics(); 
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); 
g.drawImage(tiny, 0, 0, bigger.getWidth(), bigger.getHeight(), 0, 0, tiny.getWidth(), tiny.getHeight(), null); 

通過給出可接受結果的最小值更換10縮放因子。

用高質量的插值處理其餘的渲染。

+0

謝謝!我會嘗試。 – Zee2

相關問題