aboutsummaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
authordavemorrissey <davemorrissey@gmail.com>2017-10-19 10:21:21 +0100
committerGitHub <noreply@github.com>2017-10-19 10:21:21 +0100
commit26fd1743bb55806824452c02b4c62214ad34f445 (patch)
treeeeee1d32a7684ac70940c259c93e2a997b306871 /library
parent64038a14e8453a6e24dbca399e4e517ae7f80d2c (diff)
parentc95f6e28627ac362748a833cf825a409d7ae06d1 (diff)
downloadsubsampling-scale-image-view-26fd1743bb55806824452c02b4c62214ad34f445.tar.gz
Merge pull request #349 from dhabensky/master
Support for other bitmap formats (not just default RGB565)
Diffstat (limited to 'library')
-rw-r--r--library/src/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java22
-rw-r--r--library/src/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java4
-rw-r--r--library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java15
-rw-r--r--library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java15
4 files changed, 50 insertions, 6 deletions
diff --git a/library/src/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java b/library/src/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java
index daf9dfa..d8f3d1f 100644
--- a/library/src/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java
+++ b/library/src/com/davemorrissey/labs/subscaleview/decoder/CompatDecoderFactory.java
@@ -1,20 +1,36 @@
package com.davemorrissey.labs.subscaleview.decoder;
+import android.graphics.Bitmap;
import android.support.annotation.NonNull;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
/**
* Compatibility factory to instantiate decoders with empty public constructors.
* @param <T> The base type of the decoder this factory will produce.
*/
-public class CompatDecoderFactory <T> implements DecoderFactory<T> {
+public class CompatDecoderFactory<T> implements DecoderFactory<T> {
private Class<? extends T> clazz;
+ private Bitmap.Config bitmapConfig;
public CompatDecoderFactory(@NonNull Class<? extends T> clazz) {
+ this(clazz, null);
+ }
+
+ public CompatDecoderFactory(@NonNull Class<? extends T> clazz, Bitmap.Config bitmapConfig) {
this.clazz = clazz;
+ this.bitmapConfig = bitmapConfig;
}
@Override
- public T make() throws IllegalAccessException, InstantiationException {
- return clazz.newInstance();
+ public T make() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
+ if (bitmapConfig == null) {
+ return clazz.newInstance();
+ }
+ else {
+ Constructor<? extends T> ctor = clazz.getConstructor(Bitmap.Config.class);
+ return ctor.newInstance(bitmapConfig);
+ }
}
}
diff --git a/library/src/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java b/library/src/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java
index 634904d..f15d283 100644
--- a/library/src/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java
+++ b/library/src/com/davemorrissey/labs/subscaleview/decoder/DecoderFactory.java
@@ -1,5 +1,7 @@
package com.davemorrissey.labs.subscaleview.decoder;
+import java.lang.reflect.InvocationTargetException;
+
/**
* Interface for decoder (and region decoder) factories.
* @param <T> the class of decoder that will be produced.
@@ -9,5 +11,5 @@ public interface DecoderFactory<T> {
* Produce a new instance of a decoder with type {@link T}.
* @return a new instance of your decoder.
*/
- T make() throws IllegalAccessException, InstantiationException;
+ T make() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException;
}
diff --git a/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java b/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java
index 3a42d31..d72ccdf 100644
--- a/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java
+++ b/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageDecoder.java
@@ -24,12 +24,25 @@ public class SkiaImageDecoder implements ImageDecoder {
private static final String ASSET_PREFIX = FILE_PREFIX + "/android_asset/";
private static final String RESOURCE_PREFIX = ContentResolver.SCHEME_ANDROID_RESOURCE + "://";
+ private final Bitmap.Config bitmapConfig;
+
+ public SkiaImageDecoder() {
+ this(null);
+ }
+
+ public SkiaImageDecoder(Bitmap.Config bitmapConfig) {
+ if (bitmapConfig == null)
+ this.bitmapConfig = Bitmap.Config.RGB_565;
+ else
+ this.bitmapConfig = bitmapConfig;
+ }
+
@Override
public Bitmap decode(Context context, Uri uri) throws Exception {
String uriString = uri.toString();
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap;
- options.inPreferredConfig = Bitmap.Config.RGB_565;
+ options.inPreferredConfig = bitmapConfig;
if (uriString.startsWith(RESOURCE_PREFIX)) {
Resources res;
String packageName = uri.getAuthority();
diff --git a/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java b/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java
index be95a66..b9b808f 100644
--- a/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java
+++ b/library/src/com/davemorrissey/labs/subscaleview/decoder/SkiaImageRegionDecoder.java
@@ -28,6 +28,19 @@ public class SkiaImageRegionDecoder implements ImageRegionDecoder {
private static final String ASSET_PREFIX = FILE_PREFIX + "/android_asset/";
private static final String RESOURCE_PREFIX = ContentResolver.SCHEME_ANDROID_RESOURCE + "://";
+ private final Bitmap.Config bitmapConfig;
+
+ public SkiaImageRegionDecoder() {
+ this(null);
+ }
+
+ public SkiaImageRegionDecoder(Bitmap.Config bitmapConfig) {
+ if (bitmapConfig == null)
+ this.bitmapConfig = Bitmap.Config.RGB_565;
+ else
+ this.bitmapConfig = bitmapConfig;
+ }
+
@Override
public Point init(Context context, Uri uri) throws Exception {
String uriString = uri.toString();
@@ -80,7 +93,7 @@ public class SkiaImageRegionDecoder implements ImageRegionDecoder {
synchronized (decoderLock) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = sampleSize;
- options.inPreferredConfig = Config.RGB_565;
+ options.inPreferredConfig = bitmapConfig;
Bitmap bitmap = decoder.decodeRegion(sRect, options);
if (bitmap == null) {
throw new RuntimeException("Skia image decoder returned null bitmap - image format may not be supported");