| 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 "SkBitmapRegionCanvas.h" | 8 #include "SkBitmapRegionCanvas.h" |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 | 10 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 * Android version attempts to reuse a recycled bitmap. | 49 * Android version attempts to reuse a recycled bitmap. |
| 50 * Removed the options object and used parameters for color type and | 50 * Removed the options object and used parameters for color type and |
| 51 * sample size. | 51 * sample size. |
| 52 */ | 52 */ |
| 53 SkBitmap* SkBitmapRegionCanvas::decodeRegion(int inputX, int inputY, | 53 SkBitmap* SkBitmapRegionCanvas::decodeRegion(int inputX, int inputY, |
| 54 int inputWidth, int inputHeight, | 54 int inputWidth, int inputHeight, |
| 55 int sampleSize, | 55 int sampleSize, |
| 56 SkColorType dstColorType) { | 56 SkColorType dstColorType) { |
| 57 // Reject color types not supported by this method | 57 // Reject color types not supported by this method |
| 58 if (kIndex_8_SkColorType == dstColorType || kGray_8_SkColorType == dstColorT
ype) { | 58 if (kIndex_8_SkColorType == dstColorType || kGray_8_SkColorType == dstColorT
ype) { |
| 59 SkDebugf("Error: Color type not supported.\n"); | |
| 60 return nullptr; | 59 return nullptr; |
| 61 } | 60 } |
| 62 | 61 |
| 63 // The client may not necessarily request a region that is fully within | 62 // The client may not necessarily request a region that is fully within |
| 64 // the image. We may need to do some calculation to determine what part | 63 // the image. We may need to do some calculation to determine what part |
| 65 // of the image to decode. | 64 // of the image to decode. |
| 66 | 65 |
| 67 // The left offset of the portion of the image we want, where zero | 66 // The left offset of the portion of the image we want, where zero |
| 68 // indicates the left edge of the image. | 67 // indicates the left edge of the image. |
| 69 int imageSubsetX; | 68 int imageSubsetX; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 SkAlphaType dstAlphaType = fDecoder->getInfo().alphaType(); | 107 SkAlphaType dstAlphaType = fDecoder->getInfo().alphaType(); |
| 109 if (kUnpremul_SkAlphaType == dstAlphaType) { | 108 if (kUnpremul_SkAlphaType == dstAlphaType) { |
| 110 dstAlphaType = kPremul_SkAlphaType; | 109 dstAlphaType = kPremul_SkAlphaType; |
| 111 } | 110 } |
| 112 SkImageInfo decodeInfo = SkImageInfo::Make(this->width(), this->height(), | 111 SkImageInfo decodeInfo = SkImageInfo::Make(this->width(), this->height(), |
| 113 dstColorType, dstAlphaType); | 112 dstColorType, dstAlphaType); |
| 114 | 113 |
| 115 // Start the scanline decoder | 114 // Start the scanline decoder |
| 116 SkCodec::Result r = fDecoder->startScanlineDecode(decodeInfo); | 115 SkCodec::Result r = fDecoder->startScanlineDecode(decodeInfo); |
| 117 if (SkCodec::kSuccess != r) { | 116 if (SkCodec::kSuccess != r) { |
| 118 SkDebugf("Error: Could not start scanline decoder.\n"); | |
| 119 return nullptr; | 117 return nullptr; |
| 120 } | 118 } |
| 121 | 119 |
| 122 // Allocate a bitmap for the unscaled decode | 120 // Allocate a bitmap for the unscaled decode |
| 123 SkBitmap tmp; | 121 SkBitmap tmp; |
| 124 SkImageInfo tmpInfo = decodeInfo.makeWH(this->width(), imageSubsetHeight); | 122 SkImageInfo tmpInfo = decodeInfo.makeWH(this->width(), imageSubsetHeight); |
| 125 if (!tmp.tryAllocPixels(tmpInfo)) { | 123 if (!tmp.tryAllocPixels(tmpInfo)) { |
| 126 SkDebugf("Error: Could not allocate pixels.\n"); | 124 SkDebugf("Error: Could not allocate pixels.\n"); |
| 127 return nullptr; | 125 return nullptr; |
| 128 } | 126 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 (SkScalar) get_scaled_dimension(imageSubsetWidth, sampleSize), | 177 (SkScalar) get_scaled_dimension(imageSubsetWidth, sampleSize), |
| 180 (SkScalar) get_scaled_dimension(imageSubsetHeight, sampleSize)); | 178 (SkScalar) get_scaled_dimension(imageSubsetHeight, sampleSize)); |
| 181 SkPaint paint; | 179 SkPaint paint; |
| 182 // Overwrite the dst with the src pixels | 180 // Overwrite the dst with the src pixels |
| 183 paint.setXfermodeMode(SkXfermode::kSrc_Mode); | 181 paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| 184 // TODO (msarett): Test multiple filter qualities. kNone is the default. | 182 // TODO (msarett): Test multiple filter qualities. kNone is the default. |
| 185 canvas.drawBitmapRect(tmp, src, dst, &paint); | 183 canvas.drawBitmapRect(tmp, src, dst, &paint); |
| 186 | 184 |
| 187 return bitmap.detach(); | 185 return bitmap.detach(); |
| 188 } | 186 } |
| OLD | NEW |