Java 将 Image 转换为 BufferedImage

标签 java image casting bufferedimage

已经有这样的问题 link在 StackOverflow 上,接受的答案是“casting”:

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 cannot be cast to java.awt.image.BufferedImage

显然转换不起作用。
问题是:将 Image 转换为 BufferedImage 的正确方法是什么(或是否存在)?

最佳答案

来自 Java Game Engine :

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

关于Java 将 Image 转换为 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13605248/

相关文章:

java - 如何使用java代码获取excel文件路径

java - 修改rest服务中GET的url路径

ios - 如果使用图像,Skrollr 会断断续续吗?

html - 具有相对图像路径的外部 CSS 文件是否引用外部图像?

C# 将类作为字符串传递并从数组中转换它

Java静态常量类变量赋值

java - String s = "foobar"是原子的吗?

Mysql表替换或删除行

python - 如何在 python 中使用循环进行正确的转换?

c - 为什么将 void 指针转换为 char 指针在这种情况下不起作用