/*
* 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 SkSampler_DEFINED
#define SkSampler_DEFINED
#include "SkCodec.h"
#include "SkTypes.h"
class SkSampler : public SkNoncopyable {
public:
/**
* Update the sampler to sample every sampleX'th pixel. Returns the
* width after sampling.
*/
int setSampleX(int sampleX) {
return this->onSetSampleX(sampleX);
}
/**
* Fill the remainder of the destination with a single color
*
* @param info
* Contains the color type of the rows to fill.
* Contains the width of the destination rows to fill
* Contains the number of rows that we need to fill.
*
* @param dst
* The destination row to fill from.
*
* @param rowBytes
* Stride in bytes of the destination.
*
* @param colorOrIndex
* If colorType is kN32, colorOrIndex is treated as a 32-bit color.
* If colorType is k565, colorOrIndex is treated as a 16-bit color.
* If colorType is kGray, colorOrIndex is treated as an 8-bit color.
* If colorType is kIndex, colorOrIndex is treated as an 8-bit index.
* Other SkColorTypes are not supported.
*
* @param zeroInit
* Indicates whether memory is already zero initialized.
*
*/
static void Fill(const SkImageInfo& info, void* dst, size_t rowBytes,
uint32_t colorOrIndex, SkCodec::ZeroInitialized zeroInit);
/**
* Allow subclasses to implement unique versions of fill().
*/
virtual void fill(const SkImageInfo& info, void* dst, size_t rowBytes,
uint32_t colorOrIndex, SkCodec::ZeroInitialized zeroInit) {}
virtual ~SkSampler() {}
private:
virtual int onSetSampleX(int) = 0;
};
#endif // SkSampler_DEFINED