diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-04-07 21:37:36 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-04-07 21:37:36 +0000 |
commit | 1ae492f19bc3e1ddbe97b5be6380c82f9e6eacb8 (patch) | |
tree | 331941dae5b6cd02b76329e86c150be99b130bf3 /src | |
parent | fc9482933794fb46920abc67cc84923a273e3fe1 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/images/SkDecodingImageGenerator.cpp | 7 | ||||
-rw-r--r-- | src/images/SkDecodingImageGenerator.h | 21 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/images/SkDecodingImageGenerator.cpp b/src/images/SkDecodingImageGenerator.cpp index 016362f43c..5b842abf5f 100644 --- a/src/images/SkDecodingImageGenerator.cpp +++ b/src/images/SkDecodingImageGenerator.cpp @@ -175,6 +175,8 @@ bool DecodingImageGenerator::getPixels(const SkImageInfo& info, } decoder->setDitherImage(fDitherImage); decoder->setSampleSize(fSampleSize); + decoder->setRequireUnpremultipliedColors( + info.fAlphaType == kUnpremul_SkAlphaType); SkBitmap bitmap; TargetAllocator allocator(fInfo, pixels, rowBytes); @@ -224,6 +226,7 @@ SkImageGenerator* CreateDecodingImageGenerator( } SkBitmap bitmap; decoder->setSampleSize(opts.fSampleSize); + decoder->setRequireUnpremultipliedColors(opts.fRequireUnpremul); if (!decoder->decode(stream, &bitmap, SkImageDecoder::kDecodeBounds_Mode)) { return NULL; @@ -248,6 +251,10 @@ SkImageGenerator* CreateDecodingImageGenerator( } 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)); diff --git a/src/images/SkDecodingImageGenerator.h b/src/images/SkDecodingImageGenerator.h index 17802433b1..6cb39be8d8 100644 --- a/src/images/SkDecodingImageGenerator.h +++ b/src/images/SkDecodingImageGenerator.h @@ -40,27 +40,42 @@ namespace SkDecodingImageGenerator { * type. If the decoder won't support this color type, * SkDecodingImageGenerator::Create will return * NULL. kIndex_8_SkColorType is not supported. + * + * @param fRequireUnpremul If true, the decoder will attempt to + * decode without premultiplying the alpha. If it cannot, + * the pixels will be set to NULL. */ struct Options { Options() : fSampleSize(1) , fDitherImage(true) , fUseRequestedColorType(false) - , fRequestedColorType() { } + , fRequestedColorType() + , fRequireUnpremul(false) { } Options(int sampleSize, bool dither) : fSampleSize(sampleSize) , fDitherImage(dither) , fUseRequestedColorType(false) - , fRequestedColorType() { } + , fRequestedColorType() + , fRequireUnpremul(false) { } Options(int sampleSize, bool dither, SkColorType colorType) : fSampleSize(sampleSize) , fDitherImage(dither) , fUseRequestedColorType(true) - , fRequestedColorType(colorType) { } + , fRequestedColorType(colorType) + , fRequireUnpremul(false) { } + Options(int sampleSize, bool dither, SkColorType colorType, + bool requireUnpremul) + : fSampleSize(sampleSize) + , fDitherImage(dither) + , fUseRequestedColorType(true) + , fRequestedColorType(colorType) + , fRequireUnpremul(requireUnpremul) { } const int fSampleSize; const bool fDitherImage; const bool fUseRequestedColorType; const SkColorType fRequestedColorType; + const bool fRequireUnpremul; }; /** |