2009-08-24 13 views
1

Ich habe Probleme mit der Java JAI (Java Advance Imaging) API, um die Auflösung eines JPEG-Bildes von etwa 1024x800 auf 512x400 zu ändern.JAI Ändern JPEG Auflösung

Ich habe mit der API herum gespielt und Strom oder java.lang.OutOfMemory Ausnahmen erhalten.

Jeder mit einem Arbeitsbeispiel.

Antwort

2

Hier ist ein funktionierendes Beispiel, geliefert auf einer "as is" ohne Garantie :)

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

Das AWT ist, ist es nicht? – Jesse

+0

Ah, Scheiße, du hast Recht. Ich würde die Antwort löschen, aber sie wurde bereits akzeptiert. Ich werde stattdessen deine belohnen. – skaffman

4

Hier ist eine JAI mit

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) 
    { 
    } 
} 
Verwandte Themen