Esempio n. 1
0
  public static void store(
      String codecName,
      java.io.OutputStream outputStream,
      java.awt.Image image,
      edu.cmu.cs.stage3.image.codec.ImageEncodeParam imageEncodeParam)
      throws InterruptedException, java.io.IOException {
    int width = ImageUtilities.getWidth(image);
    int height = ImageUtilities.getHeight(image);

    java.awt.image.RenderedImage renderedImage;

    if (codecName.equals("jpeg")) {
      java.awt.Image originalImage = image;
      image =
          new java.awt.image.BufferedImage(
              width, height, java.awt.image.BufferedImage.TYPE_3BYTE_BGR);
      java.awt.Graphics g = image.getGraphics();
      g.drawImage(
          originalImage,
          0,
          0,
          new java.awt.image.ImageObserver() {
            @Override
            public boolean imageUpdate(
                java.awt.Image image, int infoflags, int x, int y, int width, int height) {
              return true;
            }
          });
      // todo: does dispose ensure the image is finished drawing?
      g.dispose();
    }
    if (image instanceof java.awt.image.RenderedImage) {
      renderedImage = (java.awt.image.RenderedImage) image;
    } else {
      int[] pixels = ImageUtilities.getPixels(image, width, height);
      java.awt.image.BufferedImage bufferedImage =
          new java.awt.image.BufferedImage(
              width, height, java.awt.image.BufferedImage.TYPE_INT_ARGB);
      bufferedImage.setRGB(0, 0, width, height, pixels, 0, width);
      renderedImage = bufferedImage;
    }
    if (imageEncodeParam == null) {
      if (codecName.equals("png")) {
        imageEncodeParam =
            edu.cmu.cs.stage3.image.codec.PNGEncodeParam.getDefaultEncodeParam(renderedImage);
      }
    }
    java.io.BufferedOutputStream bufferedOutputStream;
    if (outputStream instanceof java.io.BufferedOutputStream) {
      bufferedOutputStream = (java.io.BufferedOutputStream) outputStream;
    } else {
      bufferedOutputStream = new java.io.BufferedOutputStream(outputStream);
    }

    edu.cmu.cs.stage3.image.codec.ImageEncoder imageEncoder =
        edu.cmu.cs.stage3.image.codec.ImageCodec.createImageEncoder(
            codecName, bufferedOutputStream, imageEncodeParam);
    imageEncoder.encode(renderedImage);
    bufferedOutputStream.flush();
  }