Mix.install([{:skia, path: Path.expand("..", __DIR__)}]) source = Skia.canvas(2, 2) |> Skia.rect(x: 0, y: 0, width: 1, height: 1, fill: :red) |> Skia.rect(x: 1, y: 0, width: 1, height: 1, fill: :blue) |> Skia.rect(x: 0, y: 1, width: 1, height: 1, fill: :green) |> Skia.rect(x: 1, y: 1, width: 1, height: 1, fill: :white) {:ok, source_png} = Skia.to_png(source) {:ok, image} = Skia.Image.decode(source_png) doc = Skia.canvas(160, 100) |> Skia.rect( x: 0, y: 0, width: 160, height: 100, fill: Skia.Shader.image(image, tile: :repeat, sampling: Skia.SamplingOptions.nearest()) ) {:ok, png} = Skia.to_png(doc) File.write!("image_shader_sampling.png", png)