Java:我收到一个类转换异常错误,指向我什至没有导入的类

标签 java import scale crop

我的问题很简单,我编写的代码首先缩小图像,然后裁剪到所需的尺寸(通过 Constants 类获得)。

if(image != null){
        Image originalImage = image.getImage();

        int width = Constants.width;

        //Algorithm: get the original width and divide with desired width
        int height = originalImage.getHeight(null)/(originalImage.getWidth(null)/width);

        Image scaledImage = originalImage.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH);

        //Now to crop it to specified dimensions
        BufferedImage imageToCrop = (BufferedImage) (java.awt.Image) scaledImage;

        height = Constants.height;

        imageToCrop = imageToCrop.getSubimage(imageToCrop.getWidth() - width, imageToCrop.getHeight() - height, width, height);

        image.setImage(imageToCrop);
    }

运行时,这是我收到的错误:

java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage

这对应于以下行:

BufferedImage imageToCrop = (BufferedImage) (java.awt.Image) scaledImage;

现在我还没有在任何地方导入 sun.awt,事实上这里是此类的导入项目列表:

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.ImageIcon;

那么为什么会出现这个错误呢?我就是不明白!正如你所看到的,我什至尝试了很多方法来手动强制转换,但仍然无济于事:(

非常感谢任何帮助!谢谢!

最佳答案

您没有导入它,但它是 Image 的子类,而不是 BufferedImage 的子类,因此您无法转换为它。

要从给定的 Image 创建 BufferedImage,您必须在 BufferedImage 的新实例上绘制目标图像。检查 this search 的一些结果

一个例子from dzone :

  public BufferedImage bufferImage(Image image, int type) {
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
    Graphics2D g = bufferedImage.createGraphics();
    g.drawImage(image, null, null);
    waitForImage(bufferedImage);
    return bufferedImage;
  }

关于Java:我收到一个类转换异常错误,指向我什至没有导入的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451909/

相关文章:

java - 在Java中删除Cookie/浏览器如何删除Cookie

java - 如何正确解读linux的top?

java - iTextPDF 不显示 XMLWorkerHelper 中的日语字符

sql-server - 将 Excel 电子表格列导入 SQL Server 数据库

iOS PDFKit 不填充 UIView

java - Wicket 1.5(.2) 中的 url 更改时组件未重新加载?

sql-server - 如何将 MSDE 数据库复制到 SQL Server 2008 Express?

从 "main"文件夹导入时 Golang 导入路径无效

jquery - 如何使父容器调整其高度以匹配缩放的 div

android - 如何只显示位图的一部分——