Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ jobs:
path: |
src/DemaConsulting.CanvasNet/bin/Release/*.nupkg
src/DemaConsulting.CanvasNet/bin/Release/*.snupkg
src/DemaConsulting.CanvasNet.Svg/bin/Release/*.nupkg
src/DemaConsulting.CanvasNet.Svg/bin/Release/*.snupkg

# Runs CodeQL security and quality analysis, gathering results to include
# in the code quality report.
Expand Down
111 changes: 77 additions & 34 deletions .reviewmark.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ reviews:
- "docs/reqstream/canvas-net.yaml"
paths:
- "requirements.yaml" # root requirements file
- "docs/reqstream/**/*.yaml" # all requirements files
- "docs/reqstream/canvas-net/**/*.yaml" # all requirements files

# CanvasNet-Canvas Review (one per subsystem)
- id: CanvasNet-Canvas
Expand Down Expand Up @@ -252,39 +252,6 @@ reviews:
- "test/DemaConsulting.CanvasNet.Tests/Codecs/GifCodecTests.cs" # unit tests
- "test/DemaConsulting.CanvasNet.Tests/Codecs/GifFixtureTests.cs" # fixture conformance tests

# CanvasNet-Codecs-SvgCodec Review (one per unit)
- id: CanvasNet-Codecs-SvgCodec
title: Review that CanvasNet Codecs SvgCodec Implementation is Correct
context:
- "docs/design/canvas-net.md"
- "docs/reqstream/canvas-net.yaml"
- "docs/design/canvas-net/codecs.md"
- "docs/reqstream/canvas-net/codecs.yaml"
paths:
- "docs/reqstream/canvas-net/codecs/svg-codec.yaml" # unit requirements
- "docs/design/canvas-net/codecs/svg-codec.md" # unit design
- "docs/verification/canvas-net/codecs/svg-codec.md" # unit verification
- "docs/sysml2/model/canvas-net/codecs/svg-codec.sysml" # unit SysML2 model
- "src/DemaConsulting.CanvasNet/Codecs/SvgCodec.cs" # unit source (public API entry point)
- "src/DemaConsulting.CanvasNet/Codecs/Svg/**/*.cs" # unit source (partial-class implementation files)
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.ColorMatrix.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.ComponentTransfer.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.Morphology.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.Convolution.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.DisplacementMap.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.Tile.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.DropShadow.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.FeImage.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.Lighting.cs" # phase 6 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.Turbulence.cs" # phase 6 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Css.Parser.cs" # phase 7 CSS styling partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Css.Selectors.cs" # phase 7 CSS styling partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Css.Cascade.cs" # phase 7 CSS styling partial
- "src/DemaConsulting.CanvasNet/Codecs/Svg/SvgCodec.Filters.Blend.cs" # phase 8 filter partial
- "src/DemaConsulting.CanvasNet/Codecs/NamespaceDoc.cs" # Codecs namespace documentation
- "test/DemaConsulting.CanvasNet.Tests/Codecs/SvgCodecTests.cs" # unit tests
- "test/DemaConsulting.CanvasNet.Tests/Codecs/SvgFixtureTests.cs" # fixture conformance tests

# CanvasNet-Geometry Review (one per subsystem)
- id: CanvasNet-Geometry
title: Review that CanvasNet Geometry Subsystem Implementation is Correct
Expand Down Expand Up @@ -331,6 +298,7 @@ reviews:
- "src/DemaConsulting.CanvasNet/Geometry/PathCommandType.cs" # supporting data type source
- "test/DemaConsulting.CanvasNet.Tests/Geometry/PathBuilderTests.cs" # unit tests
- "test/DemaConsulting.CanvasNet.Tests/Geometry/PathTests.cs" # unit tests
- "test/DemaConsulting.CanvasNet.Tests/Geometry/PathCommandTests.cs" # unit tests

# CanvasNet-Geometry-CornerRoundEffect Review (one per unit)
- id: CanvasNet-Geometry-CornerRoundEffect
Expand Down Expand Up @@ -568,6 +536,81 @@ reviews:
- "src/DemaConsulting.CanvasNet/Rendering/Shapes.cs" # unit source
- "test/DemaConsulting.CanvasNet.Tests/Rendering/ShapesTests.cs" # unit tests

# CanvasNetSvg-Architecture Review (one per system)
- id: CanvasNetSvg-Architecture
title: Review that CanvasNetSvg Architecture Satisfies Requirements
context:
- "README.md"
- "docs/user_guide/**/*.md"
paths:
- "docs/reqstream/canvas-net-svg.yaml" # system requirements
- "docs/design/introduction.md" # design introduction
- "docs/design/canvas-net-svg.md" # system design
- "docs/verification/introduction.md" # verification introduction
- "docs/verification/canvas-net-svg.md" # system verification
- "test/DemaConsulting.CanvasNet.Svg.Tests/SvgSystemIntegrationTests.cs" # integration tests

# CanvasNetSvg-Design Review (one per system)
- id: CanvasNetSvg-Design
title: Review that CanvasNetSvg Design is Consistent and Complete
context:
- "docs/reqstream/canvas-net-svg.yaml"
paths:
- "docs/reqstream/canvas-net-svg/platform-requirements.yaml" # platform requirements
- "docs/design/introduction.md" # design introduction
- "docs/design/canvas-net-svg.md" # system design
- "docs/design/canvas-net-svg/**/*.md" # all system design documents

# CanvasNetSvg-Verification Review (one per system)
- id: CanvasNetSvg-Verification
title: Review that CanvasNetSvg Verification is Consistent and Complete
context:
- "docs/reqstream/canvas-net-svg.yaml"
paths:
- "docs/verification/introduction.md" # verification introduction
- "docs/verification/canvas-net-svg.md" # system verification
- "docs/verification/canvas-net-svg/**/*.md" # all verification documents

# CanvasNetSvg-AllRequirements Review (one per system)
- id: CanvasNetSvg-AllRequirements
title: Review that All CanvasNetSvg Requirements are Complete
context:
- "docs/design/canvas-net-svg.md"
- "docs/reqstream/canvas-net-svg.yaml"
paths:
- "docs/reqstream/canvas-net-svg/**/*.yaml" # all requirements files

# CanvasNetSvg-SvgCodec Review (one per direct unit)
- id: CanvasNetSvg-SvgCodec
title: Review that CanvasNetSvg SvgCodec Implementation is Correct
context:
- "docs/design/canvas-net-svg.md"
- "docs/reqstream/canvas-net-svg.yaml"
paths:
- "docs/reqstream/canvas-net-svg/svg-codec.yaml" # unit requirements
- "docs/design/canvas-net-svg/svg-codec.md" # unit design
- "docs/verification/canvas-net-svg/svg-codec.md" # unit verification
- "docs/sysml2/model/canvas-net-svg/svg-codec.sysml" # unit SysML2 model
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.cs" # unit source (public API entry point)
- "src/DemaConsulting.CanvasNet.Svg/*.cs" # unit source (partial-class implementation files)
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.ColorMatrix.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.ComponentTransfer.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.Morphology.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.Convolution.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.DisplacementMap.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.Tile.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.DropShadow.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.FeImage.cs" # phase 5 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.Lighting.cs" # phase 6 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.Turbulence.cs" # phase 6 filter partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Css.Parser.cs" # phase 7 CSS styling partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Css.Selectors.cs" # phase 7 CSS styling partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Css.Cascade.cs" # phase 7 CSS styling partial
- "src/DemaConsulting.CanvasNet.Svg/SvgCodec.Filters.Blend.cs" # phase 8 filter partial
- "src/DemaConsulting.CanvasNet.Svg/NamespaceDoc.cs" # Svg namespace documentation
- "test/DemaConsulting.CanvasNet.Svg.Tests/SvgCodecTests.cs" # unit tests
- "test/DemaConsulting.CanvasNet.Svg.Tests/SvgFixtureTests.cs" # fixture conformance tests

# OTS-BuildMark Review (one per OTS item)
- id: OTS-BuildMark
title: Review that BuildMark Provides Required Functionality
Expand Down
2 changes: 2 additions & 0 deletions CanvasNet.slnx
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<Solution>
<Folder Name="/src/">
<Project Path="src/DemaConsulting.CanvasNet/DemaConsulting.CanvasNet.csproj" />
<Project Path="src/DemaConsulting.CanvasNet.Svg/DemaConsulting.CanvasNet.Svg.csproj" />
</Folder>
<Folder Name="/test/">
<Project Path="test/DemaConsulting.CanvasNet.Tests/DemaConsulting.CanvasNet.Tests.csproj" />
<Project Path="test/DemaConsulting.CanvasNet.Svg.Tests/DemaConsulting.CanvasNet.Svg.Tests.csproj" />
</Folder>
</Solution>
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ image operations using `Span<T>`, and supports independent-copy cropping for loa
- 🗜️ **JPEG Codec** - Load baseline/progressive; save baseline JPEG
- 🎞️ **GIF Codec** - Decode-only load of first GIF frame; `GetInfo` reports the true frame count
- 📐 **SVG Codec** - Rasterize a common SVG subset, including markers/filters/clip-paths/masks and
weight/style-aware font matching, to a surface
weight/style-aware font matching, to a surface (ships as the separate
`DemaConsulting.CanvasNet.Svg` package)
- 🔍 **Header-Only Probing** - `GetInfo` reads headers without decoding pixels (GIF excepted)
- 🖌️ **Path Filling** - Antialiased nonzero/even-odd fill of vector paths
- 🖊️ **Stroke-to-Fill** - Convert stroked paths into fillable outlines
Expand All @@ -55,11 +56,24 @@ Or via Package Manager Console:
Install-Package DemaConsulting.CanvasNet
```

SVG rasterization requires the separate `DemaConsulting.CanvasNet.Svg` package:

```bash
dotnet add package DemaConsulting.CanvasNet.Svg
```

Or via Package Manager Console:

```powershell
Install-Package DemaConsulting.CanvasNet.Svg
```

## Usage

```csharp
using DemaConsulting.CanvasNet.Canvas;
using DemaConsulting.CanvasNet.Codecs;
using DemaConsulting.CanvasNet.Svg;
using System.IO;

// Create a surface, set a pixel, and crop an independent copy
Expand Down
Loading
Loading