Reland "Properly set alpha type in webp decode."
Also use the newer setConfig function.
Add a test to confirm that we set the alpha type properly.
Add some images with alpha for testing. (These images are also
beneficial for the compare_unpremul test, which was previously
not meaningful on 100% opaque images.)
All of the added images are in the public domain. They were
taken from https://developers.google.com/speed/webp/gallery2:
yellow_rose:
"Free Stock Photo in High Resolution - Yellow Rose 3 - Flowers"
Image Author: Jon Sullivan
This file is in the public domain.
http://www.public-domain-photos.com/free-stock-photos-4/flowers/yellow-rose-3.jpg
baby_tux:
"baby tux for my user page"
Image Author: Fizyplankton
This file is in the public domain.
http://www.minecraftwiki.net/images/8/85/Fizyplankton.png
NOTRY=true
TBR=halcanary@google.com
BUG=skia:2388
Author: scroggo@google.com
Review URL: https://codereview.chromium.org/252423008
git-svn-id: http://skia.googlecode.com/svn/trunk@14360 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/images/SkImageDecoder_libwebp.cpp b/src/images/SkImageDecoder_libwebp.cpp
index 5174806..4e23e50 100644
--- a/src/images/SkImageDecoder_libwebp.cpp
+++ b/src/images/SkImageDecoder_libwebp.cpp
@@ -298,8 +298,20 @@
return false;
}
- return decodedBitmap->setConfig(config, width, height, 0,
- fHasAlpha ? kPremul_SkAlphaType : kOpaque_SkAlphaType);
+ SkImageInfo info;
+ info.fWidth = width;
+ info.fHeight = height;
+ info.fColorType = SkBitmapConfigToColorType(config);
+ if (SkToBool(fHasAlpha)) {
+ if (this->getRequireUnpremultipliedColors()) {
+ info.fAlphaType = kUnpremul_SkAlphaType;
+ } else {
+ info.fAlphaType = kPremul_SkAlphaType;
+ }
+ } else {
+ info.fAlphaType = kOpaque_SkAlphaType;
+ }
+ return decodedBitmap->setConfig(info);
}
bool SkWEBPImageDecoder::onBuildTileIndex(SkStreamRewindable* stream,