public ImageTranscodeResult transcode()

in imagepipeline/src/main/java/com/facebook/imagepipeline/transcoder/SimpleImageTranscoder.java [40:98]


  public ImageTranscodeResult transcode(
      EncodedImage encodedImage,
      OutputStream outputStream,
      @Nullable RotationOptions rotationOptions,
      @Nullable ResizeOptions resizeOptions,
      @Nullable ImageFormat outputFormat,
      @Nullable Integer quality) {
    if (quality == null) {
      quality = JpegTranscoderUtils.DEFAULT_JPEG_QUALITY;
    }
    if (rotationOptions == null) {
      rotationOptions = RotationOptions.autoRotate();
    }

    final int sampleSize = this.getSampleSize(encodedImage, rotationOptions, resizeOptions);
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = sampleSize;
    Bitmap resizedBitmap;
    try {
      resizedBitmap = BitmapFactory.decodeStream(encodedImage.getInputStream(), null, options);
    } catch (OutOfMemoryError oom) {
      FLog.e(TAG, "Out-Of-Memory during transcode", oom);
      return new ImageTranscodeResult(TranscodeStatus.TRANSCODING_ERROR);
    }

    if (resizedBitmap == null) {
      FLog.e(TAG, "Couldn't decode the EncodedImage InputStream ! ");
      return new ImageTranscodeResult(TranscodeStatus.TRANSCODING_ERROR);
    }

    Matrix transformationMatrix =
        JpegTranscoderUtils.getTransformationMatrix(encodedImage, rotationOptions);

    Bitmap srcBitmap = resizedBitmap;
    try {
      if (transformationMatrix != null) {
        srcBitmap =
            Bitmap.createBitmap(
                resizedBitmap,
                0,
                0,
                resizedBitmap.getWidth(),
                resizedBitmap.getHeight(),
                transformationMatrix,
                false);
      }
      srcBitmap.compress(getOutputFormat(outputFormat), quality, outputStream);
      return new ImageTranscodeResult(
          sampleSize > DownsampleUtil.DEFAULT_SAMPLE_SIZE
              ? TranscodeStatus.TRANSCODING_SUCCESS
              : TranscodeStatus.TRANSCODING_NO_RESIZING);
    } catch (OutOfMemoryError oom) {
      FLog.e(TAG, "Out-Of-Memory during transcode", oom);
      return new ImageTranscodeResult(TranscodeStatus.TRANSCODING_ERROR);
    } finally {
      srcBitmap.recycle();
      resizedBitmap.recycle();
    }
  }