Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: src/images/SkImageDecoder_libpng.cpp

Issue 25726004: Fixes for decoding to A8. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/skimage_main.cpp » ('j') | tools/skimage_main.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 if (0 != theTranspColor) { 428 if (0 != theTranspColor) {
429 reallyHasAlpha |= substituteTranspColor(decodedBitmap, theTranspColor); 429 reallyHasAlpha |= substituteTranspColor(decodedBitmap, theTranspColor);
430 } 430 }
431 if (reallyHasAlpha && this->getRequireUnpremultipliedColors() && 431 if (reallyHasAlpha && this->getRequireUnpremultipliedColors() &&
432 SkBitmap::kARGB_8888_Config != decodedBitmap->config()) { 432 SkBitmap::kARGB_8888_Config != decodedBitmap->config()) {
433 // If the caller wants an unpremultiplied bitmap, and we let them get 433 // If the caller wants an unpremultiplied bitmap, and we let them get
434 // away with a config other than 8888, and it has alpha after all, 434 // away with a config other than 8888, and it has alpha after all,
435 // return false, since the result will have premultiplied colors. 435 // return false, since the result will have premultiplied colors.
436 return false; 436 return false;
437 } 437 }
438 if (SkBitmap::kA8_Config == decodedBitmap->config()) {
reed1 2013/10/08 16:25:57 Shouldn't this block be done before line 431?
439 reallyHasAlpha = true;
reed1 2013/10/04 08:56:27 I thought this variable was set when we actually s
scroggo 2013/10/04 19:45:53 Setting the image to be opaque is an optimization
reed1 2013/10/07 13:31:39 Ah, I think I see. You're saying we don't always p
scroggo 2013/10/07 22:10:29 Sounds good to me. Uploaded https://codereview.chr
440 }
438 decodedBitmap->setIsOpaque(!reallyHasAlpha); 441 decodedBitmap->setIsOpaque(!reallyHasAlpha);
439 return true; 442 return true;
440 } 443 }
441 444
442 445
443 446
444 bool SkPNGImageDecoder::getBitmapConfig(png_structp png_ptr, png_infop info_ptr, 447 bool SkPNGImageDecoder::getBitmapConfig(png_structp png_ptr, png_infop info_ptr,
445 SkBitmap::Config* SK_RESTRICT configp, 448 SkBitmap::Config* SK_RESTRICT configp,
446 bool* SK_RESTRICT hasAlphap, 449 bool* SK_RESTRICT hasAlphap,
447 SkPMColor* SK_RESTRICT theTranspColorp) { 450 SkPMColor* SK_RESTRICT theTranspColorp) {
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 if (y < height - 1) { 884 if (y < height - 1) {
882 skip_src_rows(png_ptr, srcRow, sampler.srcDY() - 1); 885 skip_src_rows(png_ptr, srcRow, sampler.srcDY() - 1);
883 } 886 }
884 } 887 }
885 } 888 }
886 } 889 }
887 890
888 if (0 != theTranspColor) { 891 if (0 != theTranspColor) {
889 reallyHasAlpha |= substituteTranspColor(&decodedBitmap, theTranspColor); 892 reallyHasAlpha |= substituteTranspColor(&decodedBitmap, theTranspColor);
890 } 893 }
894 if (SkBitmap::kA8_Config == decodedBitmap.config()) {
895 reallyHasAlpha = true;
896 }
891 decodedBitmap.setIsOpaque(!reallyHasAlpha); 897 decodedBitmap.setIsOpaque(!reallyHasAlpha);
892 898
893 if (swapOnly) { 899 if (swapOnly) {
894 bm->swap(decodedBitmap); 900 bm->swap(decodedBitmap);
895 return true; 901 return true;
896 } 902 }
897 return this->cropBitmap(bm, &decodedBitmap, sampleSize, region.x(), region.y (), 903 return this->cropBitmap(bm, &decodedBitmap, sampleSize, region.x(), region.y (),
898 region.width(), region.height(), 0, rect.y()); 904 region.width(), region.height(), 0, rect.y());
899 } 905 }
900 #endif 906 #endif
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 return SkImageDecoder::kUnknown_Format; 1202 return SkImageDecoder::kUnknown_Format;
1197 } 1203 }
1198 1204
1199 SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) { 1205 SkImageEncoder* sk_libpng_efactory(SkImageEncoder::Type t) {
1200 return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL; 1206 return (SkImageEncoder::kPNG_Type == t) ? SkNEW(SkPNGImageEncoder) : NULL;
1201 } 1207 }
1202 1208
1203 static SkImageDecoder_DecodeReg gDReg(sk_libpng_dfactory); 1209 static SkImageDecoder_DecodeReg gDReg(sk_libpng_dfactory);
1204 static SkImageDecoder_FormatReg gFormatReg(get_format_png); 1210 static SkImageDecoder_FormatReg gFormatReg(get_format_png);
1205 static SkImageEncoder_EncodeReg gEReg(sk_libpng_efactory); 1211 static SkImageEncoder_EncodeReg gEReg(sk_libpng_efactory);
OLDNEW
« no previous file with comments | « no previous file | tools/skimage_main.cpp » ('j') | tools/skimage_main.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698