好吧我的问题很简单,在执行AffineTransform后,我的图像没有正确保存(但是它正确地在JPanel上绘制!)。这真的很奇怪,所以任何提示都非常感激......
看看代码:
public BufferedImage performRotation(BufferedImage bi){
if (angle!=180){
at.translate(0.5*bi.getHeight(), 0.5*bi.getWidth());
if(clockwise){
at.rotate(Math.toRadians(angle));
}else{
at.rotate(Math.toRadians(-angle));
}
at.translate(-0.5*bi.getWidth(), -0.5*bi.getHeight());
}
else if(angle==180){
at.translate(0.5*bi.getWidth(), 0.5*bi.getHeight());
at.rotate(Math.toRadians(angle));
at.translate(-0.5*bi.getWidth(), -0.5*bi.getHeight());
}
AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
BufferedImage bi2 = op.filter(bi, null);
try {
ImageIO.write(bi, "bmp", new File("BEFORE filterORIG.bmp"));
ImageIO.write(bi2, "bmp", new File("AFTER filterNEW.bmp"));
} catch (IOException ex) {
Logger.getLogger(DrawingField.class.getName()).log(Level.SEVERE, null, ex);
}
正确保存过滤器的文件 - >有一个图像,但它预先旋转。
文件AFTER ...保存为空白文件。
真正有趣的是,之前提到的事实是这个转换在JPanel上显示我用作显示器(我可以观察到所需转换的效果)
任何帮助表示赞赏...
答案 0 :(得分:0)
尝试编写png
张图片,即:
ImageIO.write(bi, "png", new File("BEFORE filterORIG.png"));
ImageIO.write(bi2, "png", new File("AFTER filterNEW.png"));
生成的图像(bi2)可能有一个aplha通道,ImageIO
可能不允许使用aplha将图像编码为bmp
。
或者,使用TYPE_INT_RGB
颜色模型创建目标图像,并将其用作filter()
方法中的第二个参数。