skia2/tools/SkBitmapRegionDecoderInterface.h
msarett a5783aeff0 Provides various implementations of Android's SkBitmapRegionDecoder.
Implements testing in DM for these implementations.

nanobench testing will follow after this.

TBR=scroggo
BUG=skia:

Committed: https://skia.googlesource.com/skia/+/76f755e6d54a32f9887ad254ce59a3a62f28bde4

Review URL: https://codereview.chromium.org/1288963002
2015-09-08 15:35:32 -07:00

78 lines
2.7 KiB
C++

/*
* 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