OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkCodec_libpng.h" | 8 #include "SkCodec_libpng.h" |
9 #include "SkCodecPriv.h" | 9 #include "SkCodecPriv.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 skColorType = kIndex_8_SkColorType; | 306 skColorType = kIndex_8_SkColorType; |
307 skAlphaType = has_transparency_in_tRNS(png_ptr, info_ptr) ? | 307 skAlphaType = has_transparency_in_tRNS(png_ptr, info_ptr) ? |
308 kUnpremul_SkAlphaType : kOpaque_SkAlphaType; | 308 kUnpremul_SkAlphaType : kOpaque_SkAlphaType; |
309 break; | 309 break; |
310 case PNG_COLOR_TYPE_RGB: | 310 case PNG_COLOR_TYPE_RGB: |
311 if (has_transparency_in_tRNS(png_ptr, info_ptr)) { | 311 if (has_transparency_in_tRNS(png_ptr, info_ptr)) { |
312 //convert to RGBA with tranparency information in tRNS chunk if
it exists | 312 //convert to RGBA with tranparency information in tRNS chunk if
it exists |
313 png_set_tRNS_to_alpha(png_ptr); | 313 png_set_tRNS_to_alpha(png_ptr); |
314 skAlphaType = kUnpremul_SkAlphaType; | 314 skAlphaType = kUnpremul_SkAlphaType; |
315 } else { | 315 } else { |
316 //convert to RGBA with Opaque Alpha | |
317 png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); | |
318 skAlphaType = kOpaque_SkAlphaType; | 316 skAlphaType = kOpaque_SkAlphaType; |
319 } | 317 } |
320 skColorType = kN32_SkColorType; | 318 skColorType = kN32_SkColorType; |
321 break; | 319 break; |
322 case PNG_COLOR_TYPE_GRAY: | 320 case PNG_COLOR_TYPE_GRAY: |
323 if (has_transparency_in_tRNS(png_ptr, info_ptr)) { | 321 if (has_transparency_in_tRNS(png_ptr, info_ptr)) { |
324 //FIXME: support gray with alpha as a color type | 322 //FIXME: support gray with alpha as a color type |
325 //convert to RGBA if there is transparentcy info in the tRNS chu
nk | 323 //convert to RGBA if there is transparentcy info in the tRNS chu
nk |
326 png_set_tRNS_to_alpha(png_ptr); | 324 png_set_tRNS_to_alpha(png_ptr); |
327 png_set_gray_to_rgb(png_ptr); | 325 png_set_gray_to_rgb(png_ptr); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 if (!this->decodePalette(kPremul_SkAlphaType == requestedInfo.alphaT
ype(), | 418 if (!this->decodePalette(kPremul_SkAlphaType == requestedInfo.alphaT
ype(), |
421 ctableCount)) { | 419 ctableCount)) { |
422 return kInvalidInput; | 420 return kInvalidInput; |
423 } | 421 } |
424 break; | 422 break; |
425 case kGray_8_SkColorType: | 423 case kGray_8_SkColorType: |
426 fSrcConfig = SkSwizzler::kGray; | 424 fSrcConfig = SkSwizzler::kGray; |
427 break; | 425 break; |
428 case kN32_SkColorType: | 426 case kN32_SkColorType: |
429 if (this->getInfo().alphaType() == kOpaque_SkAlphaType) { | 427 if (this->getInfo().alphaType() == kOpaque_SkAlphaType) { |
430 fSrcConfig = SkSwizzler::kRGBX; | 428 fSrcConfig = SkSwizzler::kRGB; |
431 } else { | 429 } else { |
432 fSrcConfig = SkSwizzler::kRGBA; | 430 fSrcConfig = SkSwizzler::kRGBA; |
433 } | 431 } |
434 break; | 432 break; |
435 default: | 433 default: |
436 //would have exited before now if the colorType was supported by png | 434 //would have exited before now if the colorType was supported by png |
437 SkASSERT(false); | 435 SkASSERT(false); |
438 } | 436 } |
439 | 437 |
440 // Copy the color table to the client if they request kIndex8 mode | 438 // Copy the color table to the client if they request kIndex8 mode |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 } | 778 } |
781 | 779 |
782 if (1 == numberPasses) { | 780 if (1 == numberPasses) { |
783 return new SkPngScanlineDecoder(imageInfo, streamDeleter.detach(), chunk
Reader, | 781 return new SkPngScanlineDecoder(imageInfo, streamDeleter.detach(), chunk
Reader, |
784 png_ptr, info_ptr, bitDepth); | 782 png_ptr, info_ptr, bitDepth); |
785 } | 783 } |
786 | 784 |
787 return new SkPngInterlacedScanlineDecoder(imageInfo, streamDeleter.detach(),
chunkReader, | 785 return new SkPngInterlacedScanlineDecoder(imageInfo, streamDeleter.detach(),
chunkReader, |
788 png_ptr, info_ptr, bitDepth, numbe
rPasses); | 786 png_ptr, info_ptr, bitDepth, numbe
rPasses); |
789 } | 787 } |
OLD | NEW |