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