/* * 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; /* * @param Requested destination color type * @return true if we support the requested color type and false otherwise */ virtual bool conversionSupported(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