New sample photos
diff --git a/README.md b/README.md
index 7243279..0c77a86 100644
--- a/README.md
+++ b/README.md
@@ -111,6 +111,11 @@
     SubsamplingScaleImageView imageView = (SubsamplingScaleImageView)findViewById(id.imageView);
     imageView.setImage(ImageSource.bitmap(bitmap));
 
+## Photo credits
+
+* San Martino by Luca Bravo, via [unsplash.com](https://unsplash.com/photos/lWAOc0UuJ-A)
+* Swiss Road by Ludovic Fremondiere, via [unsplash.com](https://unsplash.com/photos/3XN-BNRDUyY)
+
 ## About
 
-Copyright 2016 David Morrissey, and licensed under the Apache License, Version 2.0. No attribution is necessary but it's very much appreciated. Star this project if you like it!
+Copyright 2017 David Morrissey, and licensed under the Apache License, Version 2.0. No attribution is necessary but it's very much appreciated. Star this project if you like it!
diff --git a/sample/assets/card.png b/sample/assets/card.png
index e89768e..20f330b 100644
--- a/sample/assets/card.png
+++ b/sample/assets/card.png
Binary files differ
diff --git a/sample/assets/eagle.jpg b/sample/assets/eagle.jpg
deleted file mode 100755
index c8a80b4..0000000
--- a/sample/assets/eagle.jpg
+++ /dev/null
Binary files differ
diff --git a/sample/assets/pony.jpg b/sample/assets/pony.jpg
deleted file mode 100755
index cc11873..0000000
--- a/sample/assets/pony.jpg
+++ /dev/null
Binary files differ
diff --git a/sample/assets/sanmartino.jpg b/sample/assets/sanmartino.jpg
new file mode 100644
index 0000000..faf7a51
--- /dev/null
+++ b/sample/assets/sanmartino.jpg
Binary files differ
diff --git a/sample/assets/squirrel.jpg b/sample/assets/squirrel.jpg
deleted file mode 100644
index a8f03bb..0000000
--- a/sample/assets/squirrel.jpg
+++ /dev/null
Binary files differ
diff --git a/sample/assets/swissroad.jpg b/sample/assets/swissroad.jpg
new file mode 100644
index 0000000..3a32151
--- /dev/null
+++ b/sample/assets/swissroad.jpg
Binary files differ
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java
index d556db1..4166698 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java
@@ -39,7 +39,7 @@
             @Override public void onClick(View v) { AnimationActivity.this.play(); }
         });
         view = findViewById(id.imageView);
-        view.setImage(ImageSource.asset("squirrel.jpg"));
+        view.setImage(ImageSource.asset("sanmartino.jpg"));
     }
 
     @Override
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java
index e5357aa..ad8b600 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java
@@ -30,7 +30,7 @@
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         SubsamplingScaleImageView view = findViewById(id.imageView);
-        view.setImage(ImageSource.asset("pony.jpg"));
+        view.setImage(ImageSource.asset("sanmartino.jpg"));
     }
 
 }
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java
index a3db049..2296581 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java
@@ -38,7 +38,7 @@
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         view = findViewById(id.imageView);
-        view.setImage(ImageSource.asset("eagle.jpg"));
+        view.setImage(ImageSource.asset("card.png"));
     }
 
     @Override
@@ -51,7 +51,7 @@
         if (page == 1) {
             view.setMinimumTileDpi(50);
         } else {
-            view.setMinimumTileDpi(500);
+            view.setMinimumTileDpi(320);
         }
         if (page == 4) {
             view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER);
@@ -78,13 +78,13 @@
             view.setDebug(false);
         }
         if (page == 2) {
-            view.setScaleAndCenter(0f, new PointF(2456, 1632));
+            view.setScaleAndCenter(0f, new PointF(3900, 3120));
             view.setPanEnabled(false);
         } else {
             view.setPanEnabled(true);
         }
         if (page == 3) {
-            view.setScaleAndCenter(1f, new PointF(2456, 1632));
+            view.setScaleAndCenter(1f, new PointF(3900, 3120));
             view.setZoomEnabled(false);
         } else {
             view.setZoomEnabled(true);
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java
index 38f508d..5ce7b86 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java
@@ -29,7 +29,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         SubsamplingScaleImageView imageView = findViewById(id.imageView);
-        imageView.setImage(ImageSource.asset("pony.jpg"));
+        imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         imageView.setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) { Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_SHORT).show(); }
         });
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java
index a599379..9e0326a 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java
@@ -66,7 +66,7 @@
             }
         });
 
-        imageView.setImage(ImageSource.asset("squirrel.jpg"));
+        imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         imageView.setOnTouchListener(new View.OnTouchListener() {
             @Override
             public boolean onTouch(View view, MotionEvent motionEvent) {
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java
index fcb6687..cb79bbe 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java
@@ -23,7 +23,7 @@
             @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).previous(); }
         });
         SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView);
-        imageView.setImage(ImageSource.asset("squirrel.jpg"));
+        imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         return rootView;
     }
 
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java
index 35fbadf..73f35b1 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java
@@ -20,7 +20,7 @@
             @Override public void onClick(View v) { ((ExtensionActivity) ExtensionFreehandFragment.this.getActivity()).previous(); }
         });
         final FreehandView imageView = rootView.findViewById(id.imageView);
-        imageView.setImage(ImageSource.asset("squirrel.jpg"));
+        imageView.setImage(ImageSource.asset("sanmartino.jpg"));
         rootView.findViewById(id.reset).setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) { imageView.reset(); }
         });
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java
index 5d624c2..600b461 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java
@@ -21,8 +21,8 @@
             @Override public void onClick(View v) { ((ExtensionActivity) ExtensionPinFragment.this.getActivity()).next(); }
         });
         PinView imageView = rootView.findViewById(id.imageView);
-        imageView.setImage(ImageSource.asset("squirrel.jpg"));
-        imageView.setPin(new PointF(1718f, 581f));
+        imageView.setImage(ImageSource.asset("sanmartino.jpg"));
+        imageView.setPin(new PointF(1602f, 405f));
         return rootView;
     }
 
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java
index a85a1e6..d360d67 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java
@@ -1,5 +1,6 @@
 package com.davemorrissey.labs.subscaleview.test.imagedisplay;
 
+import android.graphics.Bitmap;
 import android.graphics.Rect;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
@@ -9,6 +10,11 @@
 
 import com.davemorrissey.labs.subscaleview.ImageSource;
 import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
+import com.davemorrissey.labs.subscaleview.decoder.CompatDecoderFactory;
+import com.davemorrissey.labs.subscaleview.decoder.ImageDecoder;
+import com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder;
+import com.davemorrissey.labs.subscaleview.decoder.SkiaImageDecoder;
+import com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder;
 import com.davemorrissey.labs.subscaleview.test.R.id;
 import com.davemorrissey.labs.subscaleview.test.R.layout;
 
@@ -18,8 +24,10 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(layout.imagedisplay_region_fragment, container, false);
         final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView);
+        imageView.setBitmapDecoderFactory(new CompatDecoderFactory<ImageDecoder>(SkiaImageDecoder.class, Bitmap.Config.ARGB_8888));
+        imageView.setRegionDecoderFactory(new CompatDecoderFactory<ImageRegionDecoder>(SkiaImageRegionDecoder.class, Bitmap.Config.ARGB_8888));
         imageView.setOrientation(SubsamplingScaleImageView.ORIENTATION_90);
-        imageView.setImage(ImageSource.asset("card.png").region(new Rect(0, 0, 3778, 2834)));
+        imageView.setImage(ImageSource.asset("card.png").region(new Rect(5200, 651, 8200, 3250)));
         rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRegionFragment.this.getActivity()).previous(); }
         });
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java
index eda4721..e3a2584 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java
@@ -17,7 +17,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(layout.imagedisplay_rotate_fragment, container, false);
         final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView);
-        imageView.setImage(ImageSource.asset("eagle.jpg"));
+        imageView.setImage(ImageSource.asset("swissroad.jpg"));
         imageView.setOrientation(90);
         rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).previous(); }
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java
index 892847d..3f9a79d 100644
--- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java
+++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java
@@ -22,7 +22,7 @@
 
 public class ViewPagerActivity extends AbstractPagesActivity {
 
-    private static final String[] IMAGES = { "eagle.jpg", "pony.jpg" };
+    private static final String[] IMAGES = { "sanmartino.jpg", "swissroad.jpg" };
 
     public ViewPagerActivity() {
         super(pager_title, view_pager, Arrays.asList(
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
index 1f96d54..4908cac 100644
--- a/sample/src/main/res/values/strings.xml
+++ b/sample/src/main/res/values/strings.xml
@@ -37,7 +37,7 @@
     <string name="display.title">Image display</string>
     <string name="display.p1.subtitle">Large images</string>
     <string name="display.p1.text">
-        This image is 7,557 x 5,669 pixels. On most devices it will be subsampled, and higher quality tiles are loaded as you zoom in.
+        This image is 7,800 x 6,240 pixels. On most devices it will be subsampled, and higher quality tiles are loaded as you zoom in.
     </string>
     <string name="display.p2.subtitle">Rotation</string>
     <string name="display.p2.text">