Add option to SkDecodingImageGenerator to require unpremul.

Android needs to be able to set unpremul for purgeable
pixelRefs.

Once Android switches to the new interface, we can delete SkImageRef.

Bug=skia:2389

R=reed@google.com, halcanary@google.com

Author: scroggo@google.com

Review URL: https://codereview.chromium.org/223903007

git-svn-id: http://skia.googlecode.com/svn/trunk@14084 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp
index 016362f..5b842ab 100644
--- a/src/images/SkDecodingImageGenerator.cpp
+++ b/src/images/SkDecodingImageGenerator.cpp
@@ -175,6 +175,8 @@
     }
     decoder->setDitherImage(fDitherImage);
     decoder->setSampleSize(fSampleSize);
+    decoder->setRequireUnpremultipliedColors(
+            info.fAlphaType == kUnpremul_SkAlphaType);
 
     SkBitmap bitmap;
     TargetAllocator allocator(fInfo, pixels, rowBytes);
@@ -224,6 +226,7 @@
     }
     SkBitmap bitmap;
     decoder->setSampleSize(opts.fSampleSize);
+    decoder->setRequireUnpremultipliedColors(opts.fRequireUnpremul);
     if (!decoder->decode(stream, &bitmap,
                          SkImageDecoder::kDecodeBounds_Mode)) {
         return NULL;
@@ -248,6 +251,10 @@
         }
         info.fColorType = opts.fRequestedColorType;
     }
+
+    if (opts.fRequireUnpremul && info.fAlphaType != kOpaque_SkAlphaType) {
+        info.fAlphaType = kUnpremul_SkAlphaType;
+    }
     return SkNEW_ARGS(DecodingImageGenerator,
                       (data, autoStream.detach(), info,
                        opts.fSampleSize, opts.fDitherImage));