| /* |
| * Copyright 2020 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkImageSampling_DEFINED |
| #define SkImageSampling_DEFINED |
| |
| #include "include/core/SkFilterQuality.h" |
| |
| enum class SkFilterMode { |
| kNearest, // single sample point (nearest neighbor) |
| kLinear, // interporate between 2x2 sample points (bilinear interpolation) |
| }; |
| |
| enum class SkMipmapMode { |
| kNone, // ignore mipmap levels, sample from the "base" |
| kNearest, // sample from the nearest level |
| kLinear, // interpolate between the two nearest levels |
| }; |
| |
| /* |
| * Specify B and C (each between 0...1) to create a shader that applies the corresponding |
| * cubic reconstruction filter to the image. |
| * |
| * Example values: |
| * B = 1/3, C = 1/3 "Mitchell" filter |
| * B = 0, C = 1/2 "Catmull-Rom" filter |
| * |
| * See "Reconstruction Filters in Computer Graphics" |
| * Don P. Mitchell |
| * Arun N. Netravali |
| * 1988 |
| * https://www.cs.utexas.edu/~fussell/courses/cs384g-fall2013/lectures/mitchell/Mitchell.pdf |
| * |
| * Desmos worksheet https://www.desmos.com/calculator/aghdpicrvr |
| * Nice overview https://entropymine.com/imageworsener/bicubic/ |
| */ |
| struct SkCubicResampler { |
| float B, C; |
| }; |
| |
| struct SkSamplingOptions { |
| bool fUseCubic = false; |
| SkCubicResampler fCubic = {0, 0}; |
| SkFilterMode fFilter = SkFilterMode::kNearest; |
| SkMipmapMode fMipmap = SkMipmapMode::kNone; |
| |
| SkSamplingOptions() = default; |
| |
| SkSamplingOptions(SkFilterMode fm, SkMipmapMode mm) |
| : fUseCubic(false) |
| , fFilter(fm) |
| , fMipmap(mm) {} |
| |
| explicit SkSamplingOptions(const SkCubicResampler& cubic) |
| : fUseCubic(true) |
| , fCubic(cubic) {} |
| |
| explicit SkSamplingOptions(SkFilterQuality); |
| }; |
| |
| #endif |