代码之家  ›  专栏  ›  技术社区  ›  talg

OSX上的JNI问题

  •  2
  • talg  · 技术社区  · 15 年前

    我在OSX(10.5.8)和Java6(1.6.0JVM:14.3-b01-101)上使用AWT类时遇到了问题。 试图加载java.awt.Dimension维度代码只是冻结,这发生在Eclipse或命令行中。有人遇到同样的问题吗? JAI在以下代码中使用该类:

    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);
    }
    

    }

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    7 年前

    你在使用Eclipse的Cocoa版本吗?(对碳)如果是的话,那可能是原因。请参阅关于此主题的讨论: Java getDefaultToolKit() hangs Mac OS X 10.5

        2
  •  0
  •   marcprux    15 年前

    您可以尝试设置“-Djava.awt.headless=真来自命令行的标志,它将允许AWT类在不必初始化GUI的情况下运行。