| /* |
| * 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 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 kF16, colorOrIndex is treated as a 64-bit color. |
| * 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, |
| uint64_t colorOrIndex, SkCodec::ZeroInitialized zeroInit); |
| |
| /** |
| * Allow subclasses to implement unique versions of fill(). |
| */ |
| virtual void fill(const SkImageInfo& info, void* dst, size_t rowBytes, |
| uint64_t colorOrIndex, SkCodec::ZeroInitialized zeroInit) {} |
| |
| SkSampler() |
| : fSampleY(1) |
| {} |
| |
| virtual ~SkSampler() {} |
| private: |
| int fSampleY; |
| |
| virtual int onSetSampleX(int) = 0; |
| }; |
| |
| #endif // SkSampler_DEFINED |