2009-08-24 2 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

하나 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) 
    { 
    } 
} 
관련 문제