Fix Palette setRegion() API

Causes an exception when the left/top of the
region isn't 0,0.

BUG: 25133337
Change-Id: Ifdd4cff9a96cc00e8e001ec33ee501d1355d936f
diff --git a/v7/palette/src/androidTest/java/android/support/v7/graphics/BucketTests.java b/v7/palette/src/androidTest/java/android/support/v7/graphics/BucketTests.java
index dc0ec1d..69c6735 100644
--- a/v7/palette/src/androidTest/java/android/support/v7/graphics/BucketTests.java
+++ b/v7/palette/src/androidTest/java/android/support/v7/graphics/BucketTests.java
@@ -66,4 +66,44 @@
 
         assertEquals(swatches, p.getSwatches());
     }
+
+    public void testRegionWhole() {
+        Palette.Builder b = new Palette.Builder(mSource);
+        b.setRegion(0, 0, mSource.getWidth(), mSource.getHeight());
+
+        Throwable thrown = null;
+        try {
+            b.generate();
+        } catch (Exception e) {
+            thrown = e;
+        }
+        assertNull(thrown);
+    }
+
+    public void testRegionUpperLeft() {
+        Palette.Builder b = new Palette.Builder(mSource);
+        b.setRegion(0, 0, mSource.getWidth() / 2, mSource.getHeight() / 2);
+
+        Throwable thrown = null;
+        try {
+            b.generate();
+        } catch (Exception e) {
+            thrown = e;
+        }
+        assertNull(thrown);
+    }
+
+    public void testRegionBottomRight() {
+        Palette.Builder b = new Palette.Builder(mSource);
+        b.setRegion(mSource.getWidth() / 2, mSource.getHeight() / 2,
+                mSource.getWidth(), mSource.getHeight());
+
+        Throwable thrown = null;
+        try {
+            b.generate();
+        } catch (Exception e) {
+            thrown = e;
+        }
+        assertNull(thrown);
+    }
 }
diff --git a/v7/palette/src/main/java/android/support/v7/graphics/Palette.java b/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
index f0e9b8e..243bc8f 100644
--- a/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
+++ b/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
@@ -694,9 +694,9 @@
                         regionWidth, regionHeight);
                 // pixels now contains all of the pixels, but not packed together. We need to
                 // iterate through each row and copy them into a new smaller array
-                final int[] subsetPixels = new int[regionWidth * mRegion.height()];
-                for (int row = mRegion.top; row < mRegion.bottom; row++) {
-                    System.arraycopy(pixels, (row * bitmapWidth) + mRegion.left,
+                final int[] subsetPixels = new int[regionWidth * regionHeight];
+                for (int row = 0; row < regionHeight; row++) {
+                    System.arraycopy(pixels, ((row + mRegion.top) * bitmapWidth) + mRegion.left,
                             subsetPixels, row * regionWidth, regionWidth);
                 }
                 return subsetPixels;