2013-10-22 9 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 जैसी कोई कक्षा नहीं है, मैं इसे नहीं डाल सकता क्योंकि ग्रहण इस कक्षा को भी नहीं देखता है। मैं Java 1.7 और jre1.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()

का रीड है
संबंधित मुद्दे