2011-03-15 13 views
0

javaで写真のサイズを変更する際に問題が発生しました。java、picture resize

xmlドキュメントから写真を取得しますが、ほとんどはランドスケープモードです。 私はそれらを私のGUIレイアウトに収まるようにサイズ変更/ポートレートモードに変換する必要があります。

これを行う方法はありますか?

+0

回転したことを意味しますか? – atamanroman

+0

最初に回転してから、サイズを変更してサイズを変更してください!私は写真を切り取るための方法しか見つけていない!しかし、私は切り抜きなしで画像全体のサイズを変更する(そして画像の一部を失う)方法があるかどうかを知りたいです – user661135

答えて

0

に基づいて、同じ値によってスケール高さと幅の両方のためにこれを書いて、あなたが最初に持っています画像を切り抜く。その後、画像のサイズを小さくする必要があります。

風景写真が500×300ピクセルで、ポートレート画像が150×250ピクセルになるようにしたいとします。

中央を切り取って、180 x 300ピクセルに風景ピクチャをトリミングすることができます。その後、クロップされた画像を150 x 250ピクセルに縮小することができます。ここで

は、画像をトリミングするためのいくつかのJavaコードです:

int x   = (videoWidth - imageWidth)/2; 
    int y   = (videoHeight - imageHeight)/2; 
    CropImageFilter cropFilter = new CropImageFilter 
      (x, y, imageWidth, imageHeight); 
    Image croppedImage = toolkit.createImage(new FilteredImageSource 
      (image.getSource(), cropFilter)); 

画像ははjava.awt.Imageで、ツールキットは、デフォルトのjava.awt.Toolkitのです。

1

同様の解像度で画像を取得するには、同じ値で幅と高さをスケールすることができます。

しかし、あなたは本当に問題がありますか?どのようにスケールするか、何?

私は回転することなく、ターゲットの幅と高さポートレートモードに風景モードから画像を変換するために

import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class ImageTest { 
    public static BufferedImage resize(int targetWidth, int targetHeight, 
      BufferedImage src) { 
     double scaleW = (double) targetWidth/(double) src.getWidth() ; 
     double scaleH = (double) targetHeight/(double) src.getHeight() ; 

     double scale = scaleW < scaleH ? scaleW : scaleH; 

     BufferedImage result = new BufferedImage((int) (src.getWidth() * scale), 
       (int) (src.getHeight() * scale), BufferedImage.TYPE_INT_ARGB); 

    Graphics2D g2d = result.createGraphics(); 
     g2d.drawImage(src, 0, 0, result.getWidth(), result.getHeight(), null); 
     g2d.dispose(); 

     return result; 
    } 

    public static void main(String[] args) throws IOException { 
     BufferedImage origin = ImageIO.read(new File(
       "/home/marcos/icons/print.png")); 

     File dest = new File("/home/marcos/icons/print2.png"); 
     dest.createNewFile(); 
     ImageIO.write(resize(180, 200, origin), "PNG", dest); 
    } 
} 
+0

はい画像を切り取らずにサイズを変更する方法があるかどうか知りたいです!私は全体の画像を使用したいと思います – user661135

+0

私の答えで追加したコードを探します。 –