2013-10-22 41 views
7

我想獲得邁上了一個緩衝的圖像的情況下,我做:如何獲得一個BufferedImage的縮放的情況下

public void analyzePosition(BufferedImage img, int x, int y){ 
    img = (BufferedImage) img.getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH); 
.... 
} 

但我得到一個異常:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage 
    at ImagePanel.analyzePosition(ImagePanel.java:43) 

話,我想轉換爲ToolkitImage然後使用getBufferedImage我在其他文章中讀到的方法。問題是沒有類如sun.awt.image.ToolkitImage我無法投射到它,因爲Eclipse甚至沒有看到這個類。我使用Java 1.7jre1.7

enter image description here

回答

12

您可以創建一個新的形象,與TookitImage的BufferedImage。

Image toolkitImage = img.getScaledInstance(getWidth(), getHeight(), 
     Image.SCALE_SMOOTH); 
int width = toolkitImage.getWidth(null); 
int height = toolkitImage.getHeight(null); 

// width and height are of the toolkit image 
BufferedImage newImage = new BufferedImage(width, height, 
     BufferedImage.TYPE_INT_ARGB); 
Graphics g = newImage.getGraphics(); 
g.drawImage(toolkitImage, 0, 0, null); 
g.dispose(); 

// now use your new BufferedImage 
3

BufferedImage#getScaledInstance實際上是從java.awt.Image繼承,只有保證它會返回一個Image,所以我會說這是不是一個好主意,試圖承擔這種情況下,潛在的返回類型。

getScaledInstance是,也不能正常最快或最好質量的方法

要縮放BufferedImage本身,你有一些不同的選擇,但大多數只是把原件並將其重新繪製到另一個圖像,應用一些過程中的一種縮放。

例如:

有關getScaledInstance更多的細節,有The Perils of Image.getScaledInstance()

相關問題