Enum InterpolationSpace
The color space a gradient's stops are mixed in.
public enum InterpolationSpace
Fields
Encoded = 0The stored sRGB-encoded values, as most libraries, browsers' legacy colors and both of Egami's references do.
GdiPlusGamma = 4As GDI+'s gamma-corrected gradients (
LinearGradientBrush.GammaCorrection), measured on Windows in 2.7.6: each pair of stops is cut into 16 equal parts, the 17 colors where they meet are mixed in light of gamma 2.2 and rounded to 8 bits, and the gradient runs straight through them in the stored encoded values. Alpha mixes straight.LinearSrgb = 1Linear-light sRGB: physically even mixing, brighter midpoints.
Oklab = 2Oklab: perceptually even mixing without the gray midpoints of opposite colors' encoded mixes.
Oklch = 3Oklch, Oklab's polar form: lightness, chroma and hue mix separately, the hue around the circle by a HueMethod.
Examples
using (RasterCanvas<Rgba8> canvas = raster.CreateCanvas())
{
// Two colors along a line; past the ends the end colors repeat (TileMode.Clamp).
canvas.FillRect(new RectF(0, 0, 200, 100), new LinearGradient(new Vector2(0, 0), new Vector2(200, 0), new RgbaF32(0.1f, 0.3f, 0.9f, 1), new RgbaF32(1, 0.8f, 0.2f, 1)));
// Several stops, mixed in Oklab for even midpoints, repeating every 40 pixels.
canvas.FillRect(new RectF(200, 0, 200, 100), new LinearGradient(
new Vector2(200, 0),
new Vector2(240, 0),
new GradientStop(0, new Rgba8(230, 40, 60, 255)),
new GradientStop(0.5f, new Rgba8(250, 210, 60, 255)),
new GradientStop(1, new Rgba8(230, 40, 60, 255)))
{
Tile = TileMode.Repeat,
Interpolation = GradientInterpolation.Oklab,
});
// A radial gradient stretched into an ellipse by its local matrix, and a sweep around a center.
canvas.FillOval(new RectF(10, 110, 180, 80), new RadialGradient(Vector2.Zero, 1, new RgbaF32(1, 1, 1, 1), new RgbaF32(0, 0.4f, 0.2f, 1))
{
LocalMatrix = Matrix3x2.CreateScale(90, 40) * Matrix3x2.CreateTranslation(100, 150),
});
canvas.FillCircle(new Vector2(300, 150), 45, new SweepGradient(
new Vector2(300, 150),
new GradientStop(0, new Rgba8(255, 0, 0, 255)),
new GradientStop(0.5f, new Rgba8(0, 0, 255, 255)),
new GradientStop(1, new Rgba8(255, 0, 0, 255))));
}