Skip to main content

Alternatives

Endpoint doesn't force you to use its Canvas or Widget APIs. Any standard 2D graphics library that renders to an in-memory buffer works. Draw into the buffer, hand it to a DisplayController, SPI / I2C device, or the Endpoint Canvas as a bitmap source.

SkiaSharp​

Full-featured 2D canvas with text, paths, gradients and image decoding. De-facto standard cross-platform drawing library for .NET; used inside Microsoft MAUI.

dotnet add package SkiaSharp
dotnet add package SkiaSharp.NativeAssets.Linux
using SkiaSharp;

using var bmp = new SKBitmap(240, 320, SKColorType.Rgb565, SKAlphaType.Opaque);
using var canvas = new SKCanvas(bmp);

canvas.Clear(SKColors.Black);
using var red = new SKPaint { Color = SKColors.Red, StrokeWidth = 2 };
canvas.DrawLine(10, 10, 230, 310, red);
canvas.DrawCircle(120, 160, 40, new SKPaint { Color = SKColors.Blue });
canvas.DrawText("Hello Endpoint", 10, 30,
new SKPaint { Color = SKColors.White, TextSize = 20 });

spi.Write(bmp.Bytes); // raw RGB565 to the display

Runtime footprint ≈ 10 MB (native Skia library).

ImageSharp​

Pure-managed image processing: resize, encode, filter. No native dependencies. Great when you're decoding JPEGs or compositing images rather than drawing primitives interactively.

dotnet add package SixLabors.ImageSharp
dotnet add package SixLabors.ImageSharp.Drawing
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.PixelFormats;

using var image = new Image<Bgr565>(240, 320);
image.Mutate(ctx => {
ctx.Fill(Color.Black);
ctx.DrawLine(Color.Red, 2, new PointF(10, 10), new PointF(230, 310));
ctx.Fill(Color.Blue, new EllipsePolygon(120, 160, 40));
ctx.DrawText("Hello Endpoint", font, Color.White, new PointF(10, 30));
});
image.CopyPixelDataTo(buffer);
spi.Write(buffer);

Microsoft.Maui.Graphics​

Microsoft's cross-platform 2D API with a pluggable backend. Lightweight (~100 KB) if you only use the drawing primitives.

dotnet add package Microsoft.Maui.Graphics
using Microsoft.Maui.Graphics;

using var bitmap = new BitmapExportContext(240, 320);
ICanvas canvas = bitmap.Canvas;

canvas.FillColor = Colors.Black;
canvas.FillRectangle(0, 0, 240, 320);
canvas.StrokeColor = Colors.Red;
canvas.DrawLine(10, 10, 230, 310);

Choose based on what you need​

NeedPick
Lines / text / circles on the panel or an external displayCanvas (ours, smallest footprint)
Vector paths, SVG, complex text layout, gradientsSkiaSharp (.NET)
Image resize / encode / filterImageSharp (.NET) · Pillow (Python)
Already-written MAUI.Graphics codeMicrosoft.Maui.Graphics (.NET)
Charts, plots, scientific plotsmatplotlib (Python)

Canvas is the lightweight default; the alternatives let you reach deeper when the problem calls for it.