通过AffineTransform旋转使保存的图像为空

时间:2012-05-13 18:30:31

标签: java image-processing rotation save affinetransform

好吧我的问题很简单,在执行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上显示我用作显示器(我可以观察到所需转换的效果)

任何帮助表示赞赏...

1 个答案:

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