Index: tools/SkBitmapRegionDecoderInterface.h |
diff --git a/tools/SkBitmapRegionDecoderInterface.h b/tools/SkBitmapRegionDecoderInterface.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bc28c2b2af6f2710c8c2d94ef3a64abb45cbe2c2 |
--- /dev/null |
+++ b/tools/SkBitmapRegionDecoderInterface.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 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 |