| /* |
| * 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(); |
| } |