def filter.op.sample
gralha-svg-render@0.1.0.1 · svg.bend:4713
import gralha-svg-render@0.1.0.1/svg.bend as Svg
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
import gralha-image@0.1.0.1/image.bend as Img
4713def filter.op.sample(op: FilterOp, +a: FilterInput, +b: FilterInput, +p: Point, +linear: Bool) -> Img.Color:
4714 match op:
4715 case FilterCopy{}: filter.input.color(a, p, linear)
4716 case FilterFlood{c}: c
4717 case FilterOffset{delta}: filter.input.color(a, point.sub(p, delta), linear)
4718 case FilterMatrix{rows}: filter.matrix(rows, filter.input.color(a, p, linear))
4719 case FilterTransfer{r, g, b, alpha}: filter.transfer(r, g, b, alpha, filter.input.color(a, p, linear))
4720 case FilterComposite{kind, k1, k2, k3, k4}: filter.composite(filter.input.color(a, p, linear), filter.input.color(b, p, linear), kind, k1, k2, k3, k4)
4721 case FilterBlend{kind}: filter.blend(filter.input.color(a, p, linear), filter.input.color(b, p, linear), kind)
4722 case FilterMerge{inputs}: filter.merge(inputs, p, linear, Img.clear())
4723 case FilterBlur{kernel}: filter.convolve(kernel, a, p, linear, Img.clear())
4724 case FilterConvolution{spec}: filter.convolution.sample(spec, a, p, linear)
4725 case FilterMorphology{dilate, radius, direction}:
4726 +n = radius
4727 +expand = dilate
4728 filter.morphology.sample(U32.to_nat((n * 2 + 1 : U32)), F32.neg(U32.to_f32(n)), direction, expand, a, p, linear, U.choose(Img.Color, expand, Img.clear(), Img.Color{1.0, 1.0, 1.0, 1.0}))