| /* |
| * Copyright 2015 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkBitmapRegionDecoder_DEFINED |
| #define SkBitmapRegionDecoder_DEFINED |
| |
| #include "SkBitmap.h" |
| #include "SkStream.h" |
| |
| /* |
| * This class aims to provide an interface to test multiple implementations of |
| * SkBitmapRegionDecoder. |
| */ |
| class SkBitmapRegionDecoderInterface { |
| public: |
| |
| enum Strategy { |
| kCanvas_Strategy, // Draw to the canvas, uses SkCodec |
| kOriginal_Strategy, // Sampling, uses SkImageDecoder |
| // TODO (msarett): Add strategy for SkScaledCodec |
| }; |
| |
| /* |
| * @param stream Encoded image stream, takes ownership |
| * @param strategy Strategy used for scaling and subsetting |
| * @return Tries to create an SkBitmapRegionDecoder, returns NULL |
| * on failure |
| */ |
| static SkBitmapRegionDecoderInterface* CreateBitmapRegionDecoder( |
| SkStreamRewindable* stream, Strategy strategy); |
| |
| /* |
| * Decode a scaled region of the encoded image stream |
| * |
| * @param start_x X-coordinate of upper-left corner of region. |
| * This coordinate is unscaled, relative to the original dimensions. |
| * @param start_y Y-coordinate of upper-left corner of region. |
| * This coordinate is unscaled, relative to the original dimensions. |
| * @param width Width of the region to decode. |
| * This distance is unscaled, relative to the original dimensions. |
| * @param height Height of the region to decode. |
| * This distance is unscaled, relative to the original dimensions. |
| * @param sampleSize An integer downscaling factor for the decode. |
| * @param colorType Preferred output colorType. |
| * New implementations should return NULL if they do not support |
| * decoding to this color type. |
| * The old kOriginal_Strategy will decode to a default color type |
| * if this color type is unsupported. |
| * @return Pointer to a bitmap of the decoded region on success, NULL on |
| * failure. |
| */ |
| virtual SkBitmap* decodeRegion(int start_x, int start_y, int width, |
| int height, int sampleSize, |
| SkColorType colorType) = 0; |
| |
| int width() const { return fWidth; } |
| int height() const { return fHeight; } |
| |
| virtual ~SkBitmapRegionDecoderInterface() {} |
| |
| protected: |
| |
| SkBitmapRegionDecoderInterface(int width, int height) |
| : fWidth(width) |
| , fHeight(height) |
| {} |
| |
| private: |
| const int fWidth; |
| const int fHeight; |
| }; |
| |
| #endif |