java - जावा कनवर्टिंग छवि टू बुफर्ड इमेज




image casting (3)

इसे संभालने का एक तरीका एक नया BufferedImage बनाना है, और अपनी स्केल की गई छवि को नए BufferedImage में खींचने के लिए ग्राफिक्स ऑब्जेक्ट को बताएं:

final float FACTOR  = 4f;
BufferedImage img = ImageIO.read(new File("graphic.png"));
int scaleX = (int) (img.getWidth() * FACTOR);
int scaleY = (int) (img.getHeight() * FACTOR);
Image image = img.getScaledInstance(scaleX, scaleY, Image.SCALE_SMOOTH);
BufferedImage buffered = new BufferedImage(scaleX, scaleY, TYPE);
buffered.getGraphics().drawImage(image, 0, 0 , null);

वह कास्टिंग के बिना चाल करना चाहिए।

StackOverflow पर इस link तरह पहले से ही सवाल है और स्वीकृत उत्तर "कास्टिंग" है:

Image image = ImageIO.read(new File(file));
BufferedImage buffered = (BufferedImage) image;

मेरे कार्यक्रम में मैं कोशिश करता हूं:

final float FACTOR  = 4f;
BufferedImage img = ImageIO.read(new File("graphic.png"));
int scaleX = (int) (img.getWidth() * FACTOR);
int scaleY = (int) (img.getHeight() * FACTOR);
Image image = img.getScaledInstance(scaleX, scaleY, Image.SCALE_SMOOTH);
BufferedImage buffered = (BufferedImage) image;

दुर्भाग्य से मुझे रन टाइम त्रुटि मिलती है:

sun.awt.image.ToolkitImage java.awt.image पर नहीं डाला जा सकता है। BufferedImage

स्पष्ट रूप से कास्टिंग काम नहीं करता है।
प्रश्न यह है: छवि को BufferedImage में परिवर्तित करने का उचित तरीका क्या है (या है)?


यदि आप एक sun.awt.image.ToolkitImage वापस प्राप्त कर रहे हैं, तो आप उस छवि को उस पर डाल सकते हैं, और फिर BufferedImage प्राप्त करने के लिए getBufferedImage() का उपयोग करें।

तो कोड की आखिरी पंक्ति के बजाय जहां आप कास्टिंग कर रहे हैं, आप बस ऐसा करेंगे:

BufferedImage buffered = ((ToolkitImage) image).getBufferedImage();

जावा गेम इंजन से :

/**
 * Converts a given Image into a BufferedImage
 *
 * @param img The Image to be converted
 * @return The converted BufferedImage
 */
public static BufferedImage toBufferedImage(Image img)
{
    if (img instanceof BufferedImage)
    {
        return (BufferedImage) img;
    }

    // Create a buffered image with transparency
    BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

    // Draw the image on to the buffered image
    Graphics2D bGr = bimage.createGraphics();
    bGr.drawImage(img, 0, 0, null);
    bGr.dispose();

    // Return the buffered image
    return bimage;
}




bufferedimage