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