diff options
author | Mike Reed <reed@google.com> | 2017-11-30 15:33:04 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-30 21:06:38 +0000 |
commit | d6cb11ee9df514a3a65b313725d3ac3bfd003e7f (patch) | |
tree | f2381b95ecb3fe1368b7021f16783376b8c6ea51 /src/codec/SkPngCodec.cpp | |
parent | 74663e722ea905972e62c59e60cd0cbc97e8435f (diff) |
encode kAlpha_8 as grayalpha with sigbits for gray==1
Bug: skia:
Change-Id: Ib61e8e0f62af92d8746f5e73469002e7804a8447
Reviewed-on: https://skia-review.googlesource.com/78481
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/codec/SkPngCodec.cpp')
-rw-r--r-- | src/codec/SkPngCodec.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp index e9fff97add..9df7bc67e1 100644 --- a/src/codec/SkPngCodec.cpp +++ b/src/codec/SkPngCodec.cpp @@ -14,6 +14,7 @@ #include "SkMath.h" #include "SkOpts.h" #include "SkPngCodec.h" +#include "SkPngPriv.h" #include "SkPoint3.h" #include "SkSize.h" #include "SkStream.h" @@ -935,7 +936,14 @@ void AutoCleanPng::infoCallback(size_t idatLength) { SkEncodedInfo encodedInfo = SkEncodedInfo::Make(color, alpha, bitDepth); SkImageInfo imageInfo = encodedInfo.makeImageInfo(origWidth, origHeight, colorSpace); - if (SkEncodedInfo::kOpaque_Alpha == alpha) { + if (encodedColorType == PNG_COLOR_TYPE_GRAY_ALPHA) { + png_color_8p sigBits; + if (png_get_sBIT(fPng_ptr, fInfo_ptr, &sigBits)) { + if (8 == sigBits->alpha && kGraySigBit_GrayAlphaIsJustAlpha == sigBits->gray) { + imageInfo = imageInfo.makeColorType(kAlpha_8_SkColorType); + } + } + } else if (SkEncodedInfo::kOpaque_Alpha == alpha) { png_color_8p sigBits; if (png_get_sBIT(fPng_ptr, fInfo_ptr, &sigBits)) { if (5 == sigBits->red && 6 == sigBits->green && 5 == sigBits->blue) { |