Mol*_*Ice 2 java import crop scale
我的问题很简单,我有我编写的代码,首先缩小图像然后裁剪到所需的尺寸(由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);
}
Run Code Online (Sandbox Code Playgroud)
运行时,这是我得到的错误:
java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
Run Code Online (Sandbox Code Playgroud)
这对应于这一行:
BufferedImage imageToCrop = (BufferedImage) (java.awt.Image) scaledImage;
Run Code Online (Sandbox Code Playgroud)
现在我没有在任何地方导入sun.awt,实际上这里是这个类的导入项目列表:
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.ImageIcon;
Run Code Online (Sandbox Code Playgroud)
那么为什么会出现这种错误呢?我只是不明白!正如你所看到的,我甚至尝试了许多方法来手动逼迫CAST,但仍无济于事:(
任何帮助真的很感激!谢谢!
你没有导入它,但它是它的子类Image,而不是它的子类BufferedImage,所以你不能强制转换它.
要从BufferedImage给定创建一个Image,您必须在新的实例上绘制目标图像BufferedImage.检查此搜索的一些结果
来自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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |