2009-08-24 7 views
1

J'ai de la difficulté à utiliser l'API Java JAI (Java Advance Imaging) pour changer la résolution d'une image JPEG, disons 1024x800 à 512x400.JAI Changer la résolution JPEG

J'ai joué avec l'API et continue de recevoir des exceptions de flux ou de java.lang.OutOfMemory.

Toute personne ayant un exemple de travail.

Répondre

2

Voici un exemple de travail, fourni « tel quel » sans 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

C'est AWT, non? – Jesse

+0

Ah, foutu, tu as raison. Je supprimerais la réponse, mais elle a déjà été acceptée. Je vais vous donner la vôtre à la place. – skaffman

4

Voici une en utilisant 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) 
    { 
    } 
} 

Questions connexes