Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkImageDecoder.h" | 10 #include "SkImageDecoder.h" |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 430 if (0 != theTranspColor) { | 430 if (0 != theTranspColor) { |
| 431 reallyHasAlpha |= substituteTranspColor(decodedBitmap, theTranspColor); | 431 reallyHasAlpha |= substituteTranspColor(decodedBitmap, theTranspColor); |
| 432 } | 432 } |
| 433 if (reallyHasAlpha && this->getRequireUnpremultipliedColors() && | 433 if (reallyHasAlpha && this->getRequireUnpremultipliedColors() && |
| 434 SkBitmap::kARGB_8888_Config != decodedBitmap->config()) { | 434 SkBitmap::kARGB_8888_Config != decodedBitmap->config()) { |
| 435 // If the caller wants an unpremultiplied bitmap, and we let them get | 435 // If the caller wants an unpremultiplied bitmap, and we let them get |
| 436 // away with a config other than 8888, and it has alpha after all, | 436 // away with a config other than 8888, and it has alpha after all, |
| 437 // return false, since the result will have premultiplied colors. | 437 // return false, since the result will have premultiplied colors. |
| 438 return false; | 438 return false; |
| 439 } | 439 } |
| 440 decodedBitmap->setIsOpaque(!reallyHasAlpha); | 440 decodedBitmap->setAlphaType(reallyHasAlpha ? kPremul_SkAlphaType : kOpaque_S kAlphaType); |
|
scroggo
2013/10/02 18:49:58
In addition to checking for unpremultiply, this ne
reed1
2013/10/03 08:22:54
Not sure what the change to the code should be. If
scroggo
2013/10/03 14:05:19
It doesn't currently change reallyHasAlpha, but it
reed1
2013/10/18 15:27:06
Done.
| |
| 441 return true; | 441 return true; |
| 442 } | 442 } |
| 443 | 443 |
| 444 | 444 |
| 445 | 445 |
| 446 bool SkPNGImageDecoder::getBitmapConfig(png_structp png_ptr, png_infop info_ptr, | 446 bool SkPNGImageDecoder::getBitmapConfig(png_structp png_ptr, png_infop info_ptr, |
| 447 SkBitmap::Config* SK_RESTRICT configp, | 447 SkBitmap::Config* SK_RESTRICT configp, |
| 448 bool* SK_RESTRICT hasAlphap, | 448 bool* SK_RESTRICT hasAlphap, |
| 449 bool* SK_RESTRICT doDitherp, | 449 bool* SK_RESTRICT doDitherp, |
| 450 SkPMColor* SK_RESTRICT theTranspColorp) { | 450 SkPMColor* SK_RESTRICT theTranspColorp) { |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 882 if (y < height - 1) { | 882 if (y < height - 1) { |
| 883 skip_src_rows(png_ptr, srcRow, sampler.srcDY() - 1); | 883 skip_src_rows(png_ptr, srcRow, sampler.srcDY() - 1); |
| 884 } | 884 } |
| 885 } | 885 } |
| 886 } | 886 } |
| 887 } | 887 } |
| 888 | 888 |
| 889 if (0 != theTranspColor) { | 889 if (0 != theTranspColor) { |
| 890 reallyHasAlpha |= substituteTranspColor(&decodedBitmap, theTranspColor); | 890 reallyHasAlpha |= substituteTranspColor(&decodedBitmap, theTranspColor); |
| 891 } | 891 } |
| 892 decodedBitmap.setIsOpaque(!reallyHasAlpha); | 892 decodedBitmap.setAlphaType(reallyHasAlpha ? kPremul_SkAlphaType : kOpaque_Sk AlphaType); |
| 893 | 893 |
| 894 if (swapOnly) { | 894 if (swapOnly) { |
| 895 bm->swap(decodedBitmap); | 895 bm->swap(decodedBitmap); |
| 896 return true; | 896 return true; |
| 897 } | 897 } |
| 898 return this->cropBitmap(bm, &decodedBitmap, sampleSize, region.x(), region.y (), | 898 return this->cropBitmap(bm, &decodedBitmap, sampleSize, region.x(), region.y (), |
| 899 region.width(), region.height(), 0, rect.y()); | 899 region.width(), region.height(), 0, rect.y()); |
| 900 } | 900 } |
| 901 #endif | 901 #endif |
| 902 | 902 |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1197 return SkImageDecoder::kUnknown_Format; | 1197 return SkImageDecoder::kUnknown_Format; |
| 1198 } | 1198 } |
| 1199 | 1199 |
| 1200 SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) { | 1200 SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) { |
| 1201 return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL; | 1201 return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL; |
| 1202 } | 1202 } |
| 1203 | 1203 |
| 1204 static SkImageDecoder_DecodeReg gDReg(sk_libpng_dfactory); | 1204 static SkImageDecoder_DecodeReg gDReg(sk_libpng_dfactory); |
| 1205 static SkImageDecoder_FormatReg gFormatReg(get_format_png); | 1205 static SkImageDecoder_FormatReg gFormatReg(get_format_png); |
| 1206 static SkImageEncoder_EncodeReg gEReg(sk_libpng_efactory); | 1206 static SkImageEncoder_EncodeReg gEReg(sk_libpng_efactory); |
| OLD | NEW |