aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkPngCodec.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-11-30 15:33:04 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-30 21:06:38 +0000
commitd6cb11ee9df514a3a65b313725d3ac3bfd003e7f (patch)
treef2381b95ecb3fe1368b7021f16783376b8c6ea51 /src/codec/SkPngCodec.cpp
parent74663e722ea905972e62c59e60cd0cbc97e8435f (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.cpp10
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) {