Index: tools/SkBitmapRegionSampler.cpp |
diff --git a/tools/SkBitmapRegionSampler.cpp b/tools/SkBitmapRegionSampler.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..98c183daac617d58c86c4b60ab50807cf155dc7c |
--- /dev/null |
+++ b/tools/SkBitmapRegionSampler.cpp |
@@ -0,0 +1,50 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkBitmapRegionSampler.h" |
+ |
+SkBitmapRegionSampler::SkBitmapRegionSampler(SkImageDecoder* decoder, int width, |
+ int height) |
+ : INHERITED(width, height) |
+ , 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 |
+ fDecoder->setDitherImage(true); |
+ fDecoder->setPreferQualityOverSpeed(false); |
+ fDecoder->setRequireUnpremultipliedColors(false); |
+ fDecoder->setSampleSize(sampleSize); |
+ |
+ // kAlpha8 is the legacy representation of kGray8 used by SkImageDecoder |
+ if (kGray_8_SkColorType == prefColorType) { |
+ prefColorType = 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)) { |
+ SkDebugf("Error: decodeRegion failed.\n"); |
+ return nullptr; |
+ } |
+ return bitmap.detach(); |
+} |