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




image casting (4)

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 में परिवर्तित करने का उचित तरीका क्या है (या है)?


इसे संभालने का एक तरीका एक नया 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);

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


यदि आप कोटलिन का उपयोग करते हैं, तो आप छवि को एक विस्तार विधि जोड़ सकते हैं उसी तरह श्री हर्ष चिलकापति सुझाव देते हैं।

fun Image.toBufferedImage(): BufferedImage {
    if (this is BufferedImage) {
        return this
    }
    val bufferedImage = BufferedImage(this.getWidth(null), this.getHeight(null), BufferedImage.TYPE_INT_ARGB)

    val graphics2D = bufferedImage.createGraphics()
    graphics2D.drawImage(this, 0, 0, null)
    graphics2D.dispose()

    return bufferedImage
}

और इस तरह इसका इस्तेमाल करें:

myImage.toBufferedImage()

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

/**
 * 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;
}

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

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

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




bufferedimage