| Index: src/codec/SkCodec_libpng.cpp
|
| diff --git a/src/codec/SkCodec_libpng.cpp b/src/codec/SkCodec_libpng.cpp
|
| index a14a67c3497856a908a406b76700cc642bff2599..a5d38343138acf1718bb4fc56320c71f760f9a52 100644
|
| --- a/src/codec/SkCodec_libpng.cpp
|
| +++ b/src/codec/SkCodec_libpng.cpp
|
| @@ -100,8 +100,9 @@ private:
|
| };
|
| #define AutoCleanPng(...) SK_REQUIRE_LOCAL_VAR(AutoCleanPng)
|
|
|
| -// call only if color_type is PALETTE. Returns true if the ctable has alpha
|
| -static bool has_transparency_in_palette(png_structp png_ptr,
|
| +//checks if there is transparency info in the tRNS chunk
|
| +//image types which could have data in the tRNS chunk include: Index8, Gray8, RGB
|
| +static bool has_transparency_in_tRNS(png_structp png_ptr,
|
| png_infop info_ptr) {
|
| if (!png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
|
| return false;
|
| @@ -287,11 +288,11 @@ static bool read_header(SkStream* stream, png_structp* png_ptrp,
|
| switch (colorType) {
|
| case PNG_COLOR_TYPE_PALETTE:
|
| skColorType = kIndex_8_SkColorType;
|
| - skAlphaType = has_transparency_in_palette(png_ptr, info_ptr) ?
|
| + skAlphaType = has_transparency_in_tRNS(png_ptr, info_ptr) ?
|
| kUnpremul_SkAlphaType : kOpaque_SkAlphaType;
|
| break;
|
| case PNG_COLOR_TYPE_RGB:
|
| - if (has_transparency_in_palette(png_ptr, info_ptr)) {
|
| + if (has_transparency_in_tRNS(png_ptr, info_ptr)) {
|
| //convert to RGBA with tranparency information in tRNS chunk if it exists
|
| png_set_tRNS_to_alpha(png_ptr);
|
| skAlphaType = kUnpremul_SkAlphaType;
|
| @@ -303,7 +304,7 @@ static bool read_header(SkStream* stream, png_structp* png_ptrp,
|
| skColorType = kN32_SkColorType;
|
| break;
|
| case PNG_COLOR_TYPE_GRAY:
|
| - if (has_transparency_in_palette(png_ptr, info_ptr)) {
|
| + if (has_transparency_in_tRNS(png_ptr, info_ptr)) {
|
| //FIXME: support gray with alpha as a color type
|
| //convert to RGBA if there is transparentcy info in the tRNS chunk
|
| png_set_tRNS_to_alpha(png_ptr);
|
|
|