/*
|
* 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 "SkCodecPriv.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);
|
}
|
|
/**
|
* Update the sampler to sample every sampleY'th row.
|
*/
|
void setSampleY(int sampleY) {
|
fSampleY = sampleY;
|
}
|
|
/**
|
* Retrieve the value set for sampleY.
|
*/
|
int sampleY() const {
|
return fSampleY;
|
}
|
|
/**
|
* Based on fSampleY, return whether this row belongs in the output.
|
*
|
* @param row Row of the image, starting with the first row in the subset.
|
*/
|
bool rowNeeded(int row) const {
|
return (row - get_start_coord(fSampleY)) % fSampleY == 0;
|
}
|
|
/**
|
* Fill the remainder of the destination with 0.
|
*
|
* 0 has a different meaning depending on the SkColorType. For color types
|
* with transparency, this means transparent. For k565 and kGray, 0 is
|
* black.
|
*
|
* @param info
|
* Contains the color type of the rows to fill.
|
* Contains the pixel width of the destination rows to fill
|
* Contains the number of rows that we need to fill.
|
*
|
* @param dst
|
* The destination row to fill.
|
*
|
* @param rowBytes
|
* Stride in bytes of the destination.
|
*
|
* @param zeroInit
|
* Indicates whether memory is already zero initialized.
|
*/
|
static void Fill(const SkImageInfo& info, void* dst, size_t rowBytes,
|
SkCodec::ZeroInitialized zeroInit);
|
|
virtual int fillWidth() const = 0;
|
|
SkSampler()
|
: fSampleY(1)
|
{}
|
|
virtual ~SkSampler() {}
|
private:
|
int fSampleY;
|
|
virtual int onSetSampleX(int) = 0;
|
};
|
|
#endif // SkSampler_DEFINED
|