Index: src/codec/SkAndroidCodec.cpp |
diff --git a/src/codec/SkAndroidCodec.cpp b/src/codec/SkAndroidCodec.cpp |
index c26b3eff9b49322d6f7a13f9564c212b1a35537a..c6fc47b3203ce77accea5ce3d07a8e5e9f622309 100644 |
--- a/src/codec/SkAndroidCodec.cpp |
+++ b/src/codec/SkAndroidCodec.cpp |
@@ -49,6 +49,43 @@ SkAndroidCodec* SkAndroidCodec::NewFromData(SkData* data, SkPngChunkReader* chun |
return NewFromStream(new SkMemoryStream(data), chunkReader); |
} |
+SkColorType SkAndroidCodec::FixRequestedColorType(SkColorType requestedColorType, |
+ SkColorType suggestedColorType, SkAlphaType suggestedAlphaType) { |
+ switch (requestedColorType) { |
+ case kIndex_8_SkColorType: |
+ if (kIndex_8_SkColorType == suggestedColorType) { |
+ return kIndex_8_SkColorType; |
+ } |
+ break; |
+ case kAlpha_8_SkColorType: |
+ // Fall through to kGray_8. Before kGray_8_SkColorType existed, |
+ // we allowed clients to request kAlpha_8 when they wanted a |
+ // grayscale decode. |
+ case kGray_8_SkColorType: |
+ if (kGray_8_SkColorType == suggestedColorType) { |
+ return kGray_8_SkColorType; |
+ } |
+ break; |
+ case kRGB_565_SkColorType: |
+ if (kOpaque_SkAlphaType == suggestedAlphaType) { |
+ return kRGB_565_SkColorType; |
+ } |
+ break; |
+ default: |
+ break; |
+ } |
+ |
+ return kN32_SkColorType; |
+} |
+ |
+SkAlphaType SkAndroidCodec::FixRequestedAlphaType(bool requestedUnpremul, |
+ SkAlphaType suggestedAlphaType) { |
+ if (kOpaque_SkAlphaType == suggestedAlphaType) { |
+ return kOpaque_SkAlphaType; |
+ } |
+ return requestedUnpremul ? kUnpremul_SkAlphaType : kPremul_SkAlphaType; |
+} |
+ |
SkISize SkAndroidCodec::getSampledDimensions(int sampleSize) const { |
if (!is_valid_sample_size(sampleSize)) { |
return SkISize::Make(0, 0); |