EncDotNet.S100.Renderers.Skia 0.20.0

dotnet add package EncDotNet.S100.Renderers.Skia --version 0.20.0
                    
NuGet\Install-Package EncDotNet.S100.Renderers.Skia -Version 0.20.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EncDotNet.S100.Renderers.Skia" Version="0.20.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EncDotNet.S100.Renderers.Skia" Version="0.20.0" />
                    
Directory.Packages.props
<PackageReference Include="EncDotNet.S100.Renderers.Skia" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EncDotNet.S100.Renderers.Skia --version 0.20.0
                    
#r "nuget: EncDotNet.S100.Renderers.Skia, 0.20.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EncDotNet.S100.Renderers.Skia@0.20.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EncDotNet.S100.Renderers.Skia&version=0.20.0
                    
Install as a Cake Addin
#tool nuget:?package=EncDotNet.S100.Renderers.Skia&version=0.20.0
                    
Install as a Cake Tool

EncDotNet.S100.Renderers.Skia

Coverage and vector rendering to SkiaSharp bitmaps.

Overview

This library renders S-100 coverage and vector data to SkiaSharp bitmaps. It handles pure rasterization without a map control. Key types include:

  • SkiaCoverageRendererICoverageRenderer<SKBitmap> implementation that maps coverage grid cells to pixel colors.
  • SkiaSvgRasterizer — rasterizes SVG portrayal symbols to tiled pattern bitmaps.
  • SkiaColorExtensions — helpers for converting between RgbaColor and SKColor.

Shared vector rendering core (now EncDotNet.S100.Rendering.Scene)

The backend-agnostic S-100 Part 9 vector rendering coreVectorScene, PaintOp, VectorSceneBuilder, ColorResolver, ScaleVisibility, and WebMercator — has been promoted to its own neutral assembly, EncDotNet.S100.Rendering.Scene, so every rendering backend (this library, EncDotNet.S100.Renderers.Mapsui, and the tiled/async render subsystem) depends on the IR without diamonding through Renderers.Skia. It lowers a display list into a resolved, projected intermediate representation (IR) so the portrayal-correctness logic lives in exactly one place:

  • VectorSceneBuilder (in Rendering.Scene) — lowers a DrawingInstruction list + IFeatureGeometryProvider into an ordered VectorScene of PaintOps: applies S-100 Part 9 draw ordering, colour/symbol/line-style resolution, mm→px conversion (1 px = 0.32 mm), text-anchor selection, and the lat/lon → EPSG:3857 projection half.
  • PaintOp / VectorScene (in Rendering.Scene) — the IR. PaintOp coordinates are EPSG:3857 metres; all sizes are logical display pixels (resolution-independent). See the PaintOp XML docs for the full unit contract.
  • SkiaDisplayListRenderer (in this library, …Renderers.Skia.Scene) — VectorScene + ViewportSKBitmap. The vector analogue of SkiaCoverageRenderer, suitable for a tile-serving web API with no Mapsui/GUI dependency. It supplies the second projection half (EPSG:3857 → screen) via a Viewport-derived affine. Parsed symbol pictures are cached process-wide (keyed by the resolved SVG), point/text ops whose anchor falls outside the viewport (plus PointCullMarginPx) are culled before any per-op work, and text drawing pools its SKFont/SKPaint per render — all three matter for the tiled subsystem's per-frame overlay, which replays this renderer live every frame. RenderOnto takes an optional cull rectangle so a caller that rotates the canvas can expand it to the rotated viewport's bounding box, plus an OverlayDrawOptions overload that adds the live Label-plane behaviour: a suppressed-text set (from LabelDeclutterer), a screen-space text anchor-rotation that keeps glyphs upright under a rotated viewport while pinning the anchor to its feature, point/text draw filters, and per-run glyph fallback in DrawText (so codepoints the primary face lacks are drawn via SKFontManager.MatchCharacter instead of .notdef tofu boxes).
  • LabelDeclutterer (…Renderers.Skia.Scene) — deterministic, priority-driven S-100 Part 9 overlap avoidance for the live label plane. Given a VectorScene it returns the set of TextPaintOps to suppress: point symbols reserve their screen footprints first, then text is placed highest-priority-first against a uniform screen-bucket index, with labels yielding to symbols and to higher-priority labels. Pure and machine-independent.
  • OverlayDrawOptions (…Renderers.Skia.Scene) — the options bag for the RenderOnto overlay pass (cull bounds, suppressed text, text anchor-rotation + screen centre, and point/text draw filters).
  • WebMercator (in Rendering.Scene) — EPSG:3857 forward projection (matches Mapsui's SphericalMercator.FromLonLat; a parity test asserts agreement).
  • ScaleVisibility (in Rendering.Scene) — shared S-100 Part 9 §11.1 scale-visibility rule.
  • ColorResolver — S-100 colour-token resolution (palette + inline hex).

Scope (spike): the IR currently covers point, line, solid-area, and text ops. Pattern fills, antimeridian crossing, and Web-Mercator pole limits are not yet represented in the IR — pattern fills remain handled by the Mapsui renderer's dedicated pattern collection / priority-clip / insert phase.

Installation

dotnet add package EncDotNet.S100.Renderers.Skia

Linux arm64 native dependency

When you publish a linux-arm64 executable that uses this renderer, reference the self-contained SkiaSharp native in your application project:


<ItemGroup>
  <PackageReference Include="SkiaSharp.NativeAssets.Linux" ExcludeAssets="all" />
  <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" />
</ItemGroup>

The regular SkiaSharp.NativeAssets.Linux arm64 libSkiaSharp.so declares undefined uuid_* / FT_Get_BDF_Property symbols that abort once fontconfig/freetype load on a normal arm64 host, so any render path crashes with undefined symbol: …. The …NoDependencies build is self-contained and renders on both x64 and arm64. Native RID asset selection belongs to the final executable, so this library does not apply the swap to your build. See issue #23.

Text labels render without any system font infrastructure: this package embeds an Open Sans face (Apache-2.0) used as a fallback when the host exposes no usable system font (e.g. the NoDependencies native on a box without fontconfig).

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on EncDotNet.S100.Renderers.Skia:

Package Downloads
EncDotNet.S100.Renderers.Mapsui

Libraries for manipulating S-100 based nautical charts.

EncDotNet.S100.Datasets.Pipelines

Per-spec IDatasetProcessor implementations, the DatasetPipelineFactory (file -> processor detection), the headless image-render capability, the S-98 interoperability authority, and the validation runner for IHO S-100 product datasets. Consumed by the EncDotNet.S100 convenience package, the viewer, and the s100 CLI.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.20.0 156 6/29/2026
0.19.0 152 6/27/2026
0.18.0 160 6/17/2026
0.17.1 158 6/16/2026
0.17.0 159 6/15/2026
0.16.0 164 6/8/2026
0.15.0 127 6/6/2026
0.14.0 121 6/6/2026
0.13.0 114 6/3/2026
0.12.0 127 5/29/2026
0.11.0 121 5/19/2026
0.10.0 116 5/16/2026
0.9.0 119 5/15/2026
0.8.0 118 5/13/2026
0.7.0 117 5/12/2026
0.6.0 132 5/8/2026
0.5.0 117 5/4/2026
0.4.0 115 5/1/2026
0.3.0 117 4/29/2026
0.2.0 117 4/14/2026
Loading failed