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);
    }

ファイル BEFORE 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 チャネルが含まれている可能性があり、aplha asImageIOを使用して画像をエンコードできない場合がありbmpます。

TYPE_INT_RGBまたは、カラー モデルを使用して宛先イメージを作成し、それをfilter()メソッドの 2 番目の引数として使用します。

于 2012-05-13T19:09:44.077 に答える