2004/12/26

今日の Java

このエントリーをはてなブックマークに追加

画像の拡大、縮小 3

前回は Graphics#drawImage メソッドでしたが、今日は Graphics2D#drawImage メソッドです。Graphics2D クラスの drawImage メソッドは引数に AffineTransform オブジェクトを使用します。

同様な処理を行うメソッドに drawRenderableImage メソッドと drawRenderedImage メソッドがあります。

前回のサンプルと拡大・縮小の以外の部分は同じなので、違うところだけ示します。ダウンロードはこちらから。

    public BufferedImage rescale(BufferedImage org, int width, int height) {
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
         
        double sx = (double)width / (double)org.getWidth();
        double sy = (double)height / (double)org.getHeight();
        AffineTransform trans = AffineTransform.getScaleInstance(sx, sy);
 
        Graphics2D g = (Graphics2D)image.getGraphics();
  
        g.drawImage(org, trans, null);
        g.dispose();
          
        return image;
    }

AffineTransform オブジェクトは new で生成することもできますが、アフィン変換の行列を使わなくてはいけないので、簡単に使えるファクトリメソッドを使用して生成しました。

後は drawImage メソッドの引数に AffineTransform オブジェクトを指定するだけです。

前回と同じ画像を使用して 150x100 に縮小してみるとだいたい同じぐらいの時間で拡大/縮小できるようです。

0 件のコメント: