private Bitmap decodeImage(String imageUri) throws IOException {
   ViewScaleType viewScaleType = imageAware.getScaleType();
   ImageDecodingInfo decodingInfo =
       new ImageDecodingInfo(
           memoryCacheKey, imageUri, targetSize, viewScaleType, getDownloader(), options);
   return decoder.decode(decodingInfo);
 }
 /** Decodes image file into Bitmap, resize it and save it back */
 private boolean resizeAndSaveImage(File targetFile, int maxWidth, int maxHeight)
     throws IOException {
   // Decode image file, compress and re-save it
   ImageSize targetImageSize = new ImageSize(maxWidth, maxHeight);
   DisplayImageOptions specialOptions =
       new DisplayImageOptions.Builder()
           .cloneFrom(options)
           .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
           .build();
   ImageDecodingInfo decodingInfo =
       new ImageDecodingInfo(
           memoryCacheKey,
           Scheme.FILE.wrap(targetFile.getAbsolutePath()),
           targetImageSize,
           ViewScaleType.FIT_INSIDE,
           getDownloader(),
           specialOptions);
   Bitmap bmp = decoder.decode(decodingInfo);
   if (bmp != null && configuration.processorForDiscCache != null) {
     log(LOG_PROCESS_IMAGE_BEFORE_CACHE_ON_DISC);
     bmp = configuration.processorForDiscCache.process(bmp);
     if (bmp == null) {
       L.e(ERROR_PROCESSOR_FOR_DISC_CACHE_NULL, memoryCacheKey);
     }
   }
   if (bmp != null) {
     OutputStream os = new BufferedOutputStream(new FileOutputStream(targetFile), BUFFER_SIZE);
     try {
       bmp.compress(
           configuration.imageCompressFormatForDiscCache,
           configuration.imageQualityForDiscCache,
           os);
     } finally {
       IoUtils.closeSilently(os);
     }
     bmp.recycle();
   }
   return true;
 }