Chromium Code Reviews| Index: src/utils/SkBitmapRegionDecoder.h |
| diff --git a/src/utils/SkBitmapRegionDecoder.h b/src/utils/SkBitmapRegionDecoder.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..91dd5625a566fd22d482a5dfadba886a8b737071 |
| --- /dev/null |
| +++ b/src/utils/SkBitmapRegionDecoder.h |
| @@ -0,0 +1,77 @@ |
| +/* |
| + * 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 SkBitmapRegionDecoder { |
| +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 SkBitmapRegionDecoder* 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. |
|
scroggo
2015/09/02 21:32:24
So if I understand correctly, these can be negativ
msarett
2015/09/03 19:20:52
Yes. This is unfortunate, but it's currently allo
|
| + * 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 ~SkBitmapRegionDecoder() {} |
| + |
| +protected: |
| + |
| + SkBitmapRegionDecoder(int width, int height) |
| + : fWidth(width) |
| + , fHeight(height) |
| + {} |
| + |
| +private: |
| + const int fWidth; |
| + const int fHeight; |
| +}; |
| + |
| +#endif |