Merge branch 'master' of github.com:davemorrissey/subsampling-scale-image-view
diff --git a/library/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java b/library/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
index 8b78921..42e287a 100644
--- a/library/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
+++ b/library/src/com/davemorrissey/labs/subscaleview/SubsamplingScaleImageView.java
@@ -136,6 +136,9 @@
// Specifies if a cache handler is also referencing the bitmap. Do not recycle if so.
private boolean bitmapIsCached;
+ // Uri of full size image
+ private Uri uri;
+
// Sample size used to display the whole image when fully zoomed out
private int fullImageSampleSize;
@@ -403,12 +406,12 @@
} else if (imageSource.getBitmap() != null) {
onImageLoaded(imageSource.getBitmap(), ORIENTATION_0, imageSource.isCached());
} else {
- this.sRegion = imageSource.getSRegion();
- Uri uri = imageSource.getUri();
+ sRegion = imageSource.getSRegion();
+ uri = imageSource.getUri();
if (uri == null && imageSource.getResource() != null) {
uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getContext().getPackageName() + "/" + imageSource.getResource());
}
- if (imageSource.getTile() || this.sRegion != null) {
+ if (imageSource.getTile() || sRegion != null) {
// Load the bitmap using tile decoding.
TilesInitTask task = new TilesInitTask(this, getContext(), regionDecoderFactory, uri);
execute(task);
@@ -447,6 +450,7 @@
matrix = null;
sRect = null;
if (newImage) {
+ uri = null;
if (decoder != null) {
synchronized (decoderLock) {
decoder.recycle();
@@ -1098,14 +1102,27 @@
fullImageSampleSize /= 2;
}
- initialiseTileMap(maxTileDimensions);
+ if (fullImageSampleSize == 1 && sRegion == null && sWidth() < maxTileDimensions.x && sHeight() < maxTileDimensions.y) {
- List<Tile> baseGrid = tileMap.get(fullImageSampleSize);
- for (Tile baseTile : baseGrid) {
- TileLoadTask task = new TileLoadTask(this, decoder, baseTile);
+ // Whole image is required at native resolution, and is smaller than the canvas max bitmap size.
+ // Use BitmapDecoder for better image support.
+ decoder.recycle();
+ decoder = null;
+ BitmapLoadTask task = new BitmapLoadTask(this, getContext(), bitmapDecoderFactory, uri, false);
execute(task);
+
+ } else {
+
+ initialiseTileMap(maxTileDimensions);
+
+ List<Tile> baseGrid = tileMap.get(fullImageSampleSize);
+ for (Tile baseTile : baseGrid) {
+ TileLoadTask task = new TileLoadTask(this, decoder, baseTile);
+ execute(task);
+ }
+ refreshRequiredTiles(true);
+
}
- refreshRequiredTiles(true);
}