Chromium Code Reviews| Index: tools/SkBitmapRegionSampler.cpp |
| diff --git a/tools/SkBitmapRegionSampler.cpp b/tools/SkBitmapRegionSampler.cpp |
| index 514af108593ffa6113233fe9cf807e376d8169fe..47472b678a4ef4ec14fff88caa73f4f4012259ac 100644 |
| --- a/tools/SkBitmapRegionSampler.cpp |
| +++ b/tools/SkBitmapRegionSampler.cpp |
| @@ -14,38 +14,36 @@ SkBitmapRegionSampler::SkBitmapRegionSampler(SkImageDecoder* decoder, int width, |
| , fDecoder(decoder) |
| {} |
| -/* |
| - * Three differences from the Android version: |
| - * Returns a Skia bitmap instead of an Android bitmap. |
| - * Android version attempts to reuse a recycled bitmap. |
| - * Removed the options object and used parameters for color type and |
| - * sample size. |
| - */ |
| -SkBitmap* SkBitmapRegionSampler::decodeRegion(int start_x, int start_y, |
| - int width, int height, |
| - int sampleSize, |
| - SkColorType prefColorType) { |
| - // Match Android's default settings |
| +bool SkBitmapRegionSampler::prepareRegion(const SkIRect& desiredSubset, |
| + int sampleSize, |
| + SkColorType dstColorType, |
| + bool requireUnpremul, |
| + SkImageInfo* outInfo) { |
| fDecoder->setDitherImage(true); |
| fDecoder->setPreferQualityOverSpeed(false); |
| - fDecoder->setRequireUnpremultipliedColors(false); |
| + fDecoder->setRequireUnpremultipliedColors(requireUnpremul); |
| fDecoder->setSampleSize(sampleSize); |
| + fSubset = desiredSubset; |
| + |
| // kAlpha8 is the legacy representation of kGray8 used by SkImageDecoder |
| - if (kGray_8_SkColorType == prefColorType) { |
| - prefColorType = kAlpha_8_SkColorType; |
| + if (kGray_8_SkColorType == dstColorType) { |
| + dstColorType = kAlpha_8_SkColorType; |
|
scroggo
2015/10/27 15:00:51
note that we'll need to update the glue code in An
|
| } |
| + fColorType = dstColorType; |
| + return true; |
| +} |
| - SkIRect region; |
| - region.fLeft = start_x; |
| - region.fTop = start_y; |
| - region.fRight = start_x + width; |
| - region.fBottom = start_y + height; |
| +bool SkBitmapRegionSampler::decodeRegion(SkBitmap& bitmap) { |
| + if (fSubset.isEmpty()) { |
| + SkCodecPrintf("Error: Call prepareRegion() first."); |
| + return false; |
| + } |
| - SkAutoTDelete<SkBitmap> bitmap(new SkBitmap()); |
| - if (!fDecoder->decodeSubset(bitmap.get(), region, prefColorType)) { |
| + if (!fDecoder->decodeSubset(&bitmap, fSubset, fColorType)) { |
| SkCodecPrintf("Error: decodeRegion failed.\n"); |
| - return nullptr; |
| + return false; |
| } |
| - return bitmap.detach(); |
| + |
| + return true; |
| } |