2009-12-09 5 views
2

Je rencontre des problèmes lors de l'utilisation de classes AWT sous OSX (10.5.8) avec Java 6 (1.6.0_17 JVM: 14.3-b01-101). Si vous essayez de charger java.awt.Dimension, le code se fige, cela se produit dans Eclipse ou depuis la ligne de commande. Quelqu'un rencontre les mêmes problèmes? La classe est utilisée par le code JAI suivant:Problème JNI sous OSX

public static byte[] resizeAsJPG(byte[] imageContent, double scale, float outputQuality) throws IllegalArgumentException, 
    ImageOperationException { 
if (scale <= 0) { 
    throw new IllegalArgumentException("scale must be a positive number"); 
} 
if (outputQuality <= 0 || outputQuality > 1.0F) { 
    throw new IllegalArgumentException("outputQuality must be between 0 and 1"); 
} 
try { 
    // Fetch input image to seekable stream 
    RenderedOp originalImage = getRenderedOp(imageContent); 
    ((OpImage) originalImage.getRendering()).setTileCache(null); 

    // Set scale parameters 
    ParameterBlock saclingParams = new ParameterBlock(); 
    saclingParams.addSource(originalImage); // The source image 
    saclingParams.add(scale); // The xScale 
    saclingParams.add(scale); // The yScale 
    saclingParams.add(0.0); // The x translation 
    saclingParams.add(0.0); // The y translation 

    // RenderingHints renderingHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
    Map<RenderingHints.Key, Object> renderingHints = new HashMap<RenderingHints.Key, Object>(); 
    renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
    renderingHints.put(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); 
    renderingHints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); 
    renderingHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

    // Scale using sub-sampling average which provides much better quality than bicubic interpolation 
    RenderedOp scaledImage = JAI.create("SubsampleAverage", saclingParams, new RenderingHints(renderingHints)); 

    // Encode scaled image as JPEG 
    JPEGEncodeParam encodeParam = new JPEGEncodeParam(); 
    encodeParam.setQuality(outputQuality); 

    // Since we scale height and width (don't take into account the quality) 
    int outputSizeEstimate = (int) (imageContent.length * scale * scale); 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(outputSizeEstimate); 
    ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG", outputStream, encodeParam); 
    encoder.encode(scaledImage); 
    return outputStream.toByteArray(); 
} catch (Exception e) { 
    throw new ImageOperationException(e.getMessage(), e); 
} 

}

Répondre

0

Vous pouvez essayer de placer le drapeau "-Djava.awt.headless = true" de la ligne de commande, ce qui permettra à des classes AWT pour exécuter sans avoir à initialiser une interface graphique. Utilisez-vous la version Cocoa d'Eclipse?

+0

Cela n'a pas aidé – talg