我的问题很简单,我编写的代码首先缩小图像,然后裁剪到所需的尺寸(通过 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/