2009-08-24 23 views
1

Java JAI(Java Advance Imaging)APIを使用してJPEG画像の解像度を1024x800から512x400に変更するのが難しいです。JAI JPEG解像度を変更する

私はAPIで遊んだり、ストリームやjava.lang.OutOfMemory例外を取得し続けています。

実用的な例を持つ人。ここで

答えて

2

それは、無保証:)

ここ
BufferedImage scaleImage(BufferedImage sourceImage, int scaledWidth) { 
    float scale = scaledWidth/(float) sourceImage.getWidth(); 
    int scaledHeight = (int) (sourceImage.getHeight() * scale); 
    Image scaledImage = sourceImage.getScaledInstance(
     scaledWidth, 
     scaledHeight, 
     Image.SCALE_AREA_AVERAGING 
    ); 

    BufferedImage bufferedImage = new BufferedImage(
     scaledImage.getWidth(null), 
     scaledImage.getHeight(null), 
     BufferedImage.TYPE_INT_RGB 
    ); 
    Graphics g = bufferedImage.createGraphics(); 
    g.drawImage(scaledImage, 0, 0, null); 
    g.dispose(); 

    return bufferedImage; 
} 
+0

これはAWTであるを使用していて「そのまま」に基づき供給、作業例ですね。 – Jesse

+0

ああ、バグ、そうだよ。私は答えを削除するだろうが、それはすでに受け入れられている。私は代わりにあなたをアップアップします。 – skaffman

4

1は、JAI

public void resize(String filename, RenderedOp image, double wScale, double hScale) 
{ 
    // now resize the image 
    ParameterBlock pb = new ParameterBlock(); 
    pb.addSource(image); // The source image 
    pb.add(wScale); // The xScale 
    pb.add(hScale); // The yScale 
    pb.add(0.0F); // The x translation 
    pb.add(0.0F); // The y translation 

    RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);  
    RenderedOp resizedImage = JAI.create("SubsampleAverage", pb, hints); 

    // lastly, write the newly-resized image to an 
    // output stream, in a specific encoding 
    try 
    { 
     FileOutputStream fos = new FileOutputStream(new File(filename)); 
     JAI.create("encode", resizedImage, fos, getImageType(filename), null); 
    } 
    catch (FileNotFoundException e) 
    { 
    } 
} 
関連する問題