0

好的,我的问题很简单,在执行 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);
    }

正确保存 filterORIG 之前的文件 -> 有一个图像,但它已预先旋转。

File AFTER... 保存为空白文件。

真正有趣的是,前面提到的事实是,这种转换在我用作显示器的 JPanel 上被普遍显示(我可以观察到所需转换的效果)

任何帮助表示赞赏...

4

1 回答 1

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()方法中的第二个参数。

于 2012-05-13T19:09:44.077 回答