diff --git a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayImageOptions.java b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayImageOptions.java index deddaa772..43869f51a 100644 --- a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayImageOptions.java +++ b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayImageOptions.java @@ -14,6 +14,7 @@ *
  • whether loaded image will be cached in memory
  • *
  • whether loaded image will be cached on disc
  • *
  • image scale type
  • + *
  • bitmap decoding configuration
  • *
  • how decoded {@link Bitmap} will be displayed
  • * * @@ -36,6 +37,7 @@ public final class DisplayImageOptions { private final boolean cacheInMemory; private final boolean cacheOnDisc; private final ImageScaleType imageScaleType; + private final Bitmap.Config bitmapConfig; private final BitmapDisplayer displayer; private DisplayImageOptions(Builder builder) { @@ -45,6 +47,7 @@ private DisplayImageOptions(Builder builder) { cacheInMemory = builder.cacheInMemory; cacheOnDisc = builder.cacheOnDisc; imageScaleType = builder.imageScaleType; + bitmapConfig = builder.bitmapConfig; displayer = builder.displayer; } @@ -80,6 +83,10 @@ ImageScaleType getImageScaleType() { return imageScaleType; } + Bitmap.Config getBitmapConfig() { + return bitmapConfig; + } + BitmapDisplayer getDisplayer() { return displayer; } @@ -96,6 +103,7 @@ public static class Builder { private boolean cacheInMemory = false; private boolean cacheOnDisc = false; private ImageScaleType imageScaleType = ImageScaleType.IN_SAMPLE_POWER_OF_2; + private Bitmap.Config bitmapConfig = Bitmap.Config.ARGB_8888; private BitmapDisplayer displayer = DefaultConfigurationFactory.createBitmapDisplayer(); /** @@ -148,6 +156,12 @@ public Builder imageScaleType(ImageScaleType imageScaleType) { return this; } + /** Sets {@link Bitmap.Config bitmap config} for image decoding. Default value - {@link Bitmap.Config#ARGB_8888} */ + public Builder bitmapConfig(Bitmap.Config bitmapConfig) { + this.bitmapConfig = bitmapConfig; + return this; + } + /** * Sets custom {@link BitmapDisplayer displayer} for image loading task. Default value - * {@link DefaultConfigurationFactory#createBitmapDisplayer()} diff --git a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/ImageDecoder.java b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/ImageDecoder.java index 695f7f223..9ed96fac2 100644 --- a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/ImageDecoder.java +++ b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/ImageDecoder.java @@ -22,6 +22,7 @@ * @see ImageScaleType * @see ViewScaleType * @see ImageDownloader + * @see DisplayImageOptions */ class ImageDecoder { @@ -30,6 +31,7 @@ class ImageDecoder { private final URI imageUri; private final ImageDownloader imageDownloader; + private final DisplayImageOptions displayOptions; private boolean loggingEnabled; @@ -40,9 +42,10 @@ class ImageDecoder { * Image downloader * */ - ImageDecoder(URI imageUri, ImageDownloader imageDownloader) { + ImageDecoder(URI imageUri, ImageDownloader imageDownloader, DisplayImageOptions options) { this.imageUri = imageUri; this.imageDownloader = imageDownloader; + this.displayOptions = options; } /** @@ -97,9 +100,10 @@ public Bitmap decode(ImageSize targetSize, ImageScaleType scaleType, ViewScaleTy } private Options getBitmapOptionsForImageDecoding(ImageSize targetSize, ImageScaleType scaleType, ViewScaleType viewScaleType) throws IOException { - Options options = new Options(); - options.inSampleSize = computeImageScale(targetSize, scaleType, viewScaleType); - return options; + Options decodeOptions = new Options(); + decodeOptions.inSampleSize = computeImageScale(targetSize, scaleType, viewScaleType); + decodeOptions.inPreferredConfig = displayOptions.getBitmapConfig(); + return decodeOptions; } @SuppressWarnings("deprecation") diff --git a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java index bc2de82b1..34a6e6db9 100644 --- a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java +++ b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java @@ -168,7 +168,7 @@ private Bitmap decodeImage(URI imageUri) throws IOException { if (configuration.handleOutOfMemory) { bmp = decodeWithOOMHandling(imageUri); } else { - ImageDecoder decoder = new ImageDecoder(imageUri, configuration.downloader); + ImageDecoder decoder = new ImageDecoder(imageUri, configuration.downloader, imageLoadingInfo.options); decoder.setLoggingEnabled(configuration.loggingEnabled); ViewScaleType viewScaleType = ViewScaleType.fromImageView(imageLoadingInfo.imageView); bmp = decoder.decode(imageLoadingInfo.targetSize, imageLoadingInfo.options.getImageScaleType(), viewScaleType); @@ -178,7 +178,7 @@ private Bitmap decodeImage(URI imageUri) throws IOException { private Bitmap decodeWithOOMHandling(URI imageUri) throws IOException { Bitmap result = null; - ImageDecoder decoder = new ImageDecoder(imageUri, configuration.downloader); + ImageDecoder decoder = new ImageDecoder(imageUri, configuration.downloader, imageLoadingInfo.options); decoder.setLoggingEnabled(configuration.loggingEnabled); for (int attempt = 1; attempt <= ATTEMPT_COUNT_TO_DECODE_BITMAP; attempt++) { try { @@ -213,7 +213,7 @@ private void saveImageOnDisc(File targetFile) throws IOException, URISyntaxExcep if (width > 0 || height > 0) { // Download, decode, compress and save image ImageSize targetImageSize = new ImageSize(width, height); - ImageDecoder decoder = new ImageDecoder(new URI(imageLoadingInfo.uri), configuration.downloader); + ImageDecoder decoder = new ImageDecoder(new URI(imageLoadingInfo.uri), configuration.downloader, imageLoadingInfo.options); decoder.setLoggingEnabled(configuration.loggingEnabled); Bitmap bmp = decoder.decode(targetImageSize, ImageScaleType.IN_SAMPLE_INT, ViewScaleType.FIT_INSIDE);