Index: tools/SkBitmapRegionSampler.cpp |
diff --git a/tools/SkBitmapRegionSampler.cpp b/tools/SkBitmapRegionSampler.cpp |
index 514af108593ffa6113233fe9cf807e376d8169fe..0714c26fbf1a27c0f13c557c1941302f1a9827d9 100644 |
--- a/tools/SkBitmapRegionSampler.cpp |
+++ b/tools/SkBitmapRegionSampler.cpp |
@@ -14,38 +14,20 @@ 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::decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* allocator, |
+ const SkIRect& desiredSubset, int sampleSize, SkColorType colorType, bool requireUnpremul) { |
fDecoder->setDitherImage(true); |
fDecoder->setPreferQualityOverSpeed(false); |
fDecoder->setRequireUnpremultipliedColors(false); |
fDecoder->setSampleSize(sampleSize); |
+ fDecoder->setAllocator(allocator); |
// kAlpha8 is the legacy representation of kGray8 used by SkImageDecoder |
- if (kGray_8_SkColorType == prefColorType) { |
- prefColorType = kAlpha_8_SkColorType; |
+ if (kGray_8_SkColorType == colorType) { |
+ colorType = kAlpha_8_SkColorType; |
} |
- SkIRect region; |
- region.fLeft = start_x; |
- region.fTop = start_y; |
- region.fRight = start_x + width; |
- region.fBottom = start_y + height; |
- |
- SkAutoTDelete<SkBitmap> bitmap(new SkBitmap()); |
- if (!fDecoder->decodeSubset(bitmap.get(), region, prefColorType)) { |
- SkCodecPrintf("Error: decodeRegion failed.\n"); |
- return nullptr; |
- } |
- return bitmap.detach(); |
+ bool result = fDecoder->decodeSubset(bitmap, desiredSubset, colorType); |
+ fDecoder->setAllocator(nullptr); |
+ return result; |
} |