首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在UWP C#中实现SVG到WriteableBitmap的转换

在UWP C#中实现SVG到WriteableBitmap的转换可以通过以下步骤进行:

  1. 引用相关的库:在项目中引用SVG加载库,例如SharpVectors。可以通过NuGet包管理器安装对应的库。
  2. 加载SVG文件:使用SVG加载库的API,加载SVG文件并将其转换为对应的SVG对象。可以使用SvgDocument类来加载SVG文件。
  3. 创建画布:使用UWP的CanvasControl或者Image控件作为画布,用于显示转换后的SVG图像。
  4. 转换SVG到WriteableBitmap:将加载的SVG对象转换为WriteableBitmap对象。可以使用RenderTargetBitmap类和SvgDrawingRenderer类来实现此转换过程。
    • 使用RenderTargetBitmap类创建一个目标位图,设置其大小和像素密度。
    • 使用SvgDrawingRenderer类将SVG对象绘制到目标位图上,调用Render()方法来实现绘制操作。
  • 显示转换后的图像:将转换后的WriteableBitmap对象设置为画布的内容,从而将SVG图像显示在界面上。

下面是一个示例代码:

代码语言:txt
复制
using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Shapes;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
using SvgDocument = SharpVectors.Dom.SvgDocument;
using SvgConverter = SharpVectors.Converters.SvgConverter;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.IO;

public class SVGtoWriteableBitmapConverter
{
    public async Task<WriteableBitmap> ConvertSvgToWriteableBitmap(string svgFilePath)
    {
        // 加载SVG文件
        var svgDocument = await LoadSvgFile(svgFilePath);
        
        // 创建目标位图
        var renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(svgDocument, svgDocument.ViewBox);
        
        // 转换为WriteableBitmap
        var writeableBitmap = new WriteableBitmap(renderTargetBitmap.PixelWidth, renderTargetBitmap.PixelHeight);
        var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
        var pixels = pixelBuffer.ToArray();
        using (var stream = writeableBitmap.PixelBuffer.AsStream())
        {
            await stream.WriteAsync(pixels, 0, pixels.Length);
        }
        
        return writeableBitmap;
    }
    
    private async Task<SvgDocument> LoadSvgFile(string svgFilePath)
    {
        using (var stream = await Windows.Storage.StorageFile.GetFileFromPathAsync(svgFilePath).OpenStreamForReadAsync())
        {
            var svgDocument = SvgConverter.Load(stream);
            return svgDocument;
        }
    }
}

// 在需要显示SVG图像的地方调用ConvertSvgToWriteableBitmap方法
var converter = new SVGtoWriteableBitmapConverter();
var writeableBitmap = await converter.ConvertSvgToWriteableBitmap("path/to/svg/file.svg");

// 设置WriteableBitmap为画布的内容
myCanvas.Background = new ImageBrush { ImageSource = writeableBitmap };

该代码使用了SharpVectors库来加载和转换SVG文件,并使用UWP提供的RenderTargetBitmap和WriteableBitmap类进行转换和显示。请注意,需要先安装SharpVectors库,并将其引入到项目中。

这是一个基本的实现SVG到WriteableBitmap的转换过程。根据具体需求和场景,可以进一步优化和定制代码。希望对您有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 从入门放弃 500 篇文章合集

本文是记录我从入门放弃写博客 博客包括 C#、WPF、UWP、dotnet core 、git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门放弃...C# 判断系统版本 C# 动态加载卸载 DLL C# 复制列表 C# 如何写 DEBUG 输出 C#何在项目引用x86 x64非托管代码 C# 已知点和向量,求距离C# 强转会不会抛出异常...C# 很少人知道科技 C# 快速释放内存大数组 C# 搜索算法 C# 获得设备usb信息 C# 转换类型和字符串 C# 遍历枚举 C# 金额转中文大写 C#将dll打包程序 c-70 c-设计模式...WPF 对比 UWP 开发,需要知道1000个问题 Visual studio C# 代码使用 NotNull visual Studio 无法调试,提示程序跟踪已退出 visual-studio-...+Tab 隐藏窗口 WPF 好看矢量图标 wpf 如何使用 Magick.NET 播放 gif 图片 WPF 如何在 WriteableBitmap 写文字 WPF 如何在应用程序调试启动 WPF 如何在绑定失败异常

10.4K20

WPF 使用 Skia 解析绘制 SVG 图片

本文告诉大家如何在 WPF 里面,使用 Skia 解析绘制 SVG 图片。...本文也适合控制台使用 SkiaSharp 解析绘制 SVG 图片,本文 WPF 部分只是在 Skia 绘制完成之后,将 Skia 内容绘制 WPF WriteableBitmap 图片,从而在界面显示...既然 Skia 没有这个功能,那也不能要求对 Skia 封装 SkiaSharp 有这个功能吧, Matthew Leibowitz 大佬回复 详细请看 https://github.com/mono...SKSvg 就是 Svg.Skia 提供类型 为了方便进行渲染,获取到 SVG 尺寸,先转换为 SKBitmap 类型。...这里设计是转换失败返回空,以上方法是不能支持所有的 SVG 格式文件,只对 SVG 1.1 版本支持比较好 var skBitmap = skSvgPicture.ToBitmap(SKColor.Empty

1.8K30
  • 使用Writeable​Bitmap创建HSV色轮

    色相(H)是色彩基本属性,就是平常所说颜色名称,红色、黄色等,取值0-360。红色是0,绿色是120,蓝色为240。...1.2.1 从RGBHSL或HSV转换 (r, g, b)分别是一个颜色红、绿和蓝坐标,它们值是在01之间实数。设max等价于r, g和b最大者。...1.2.2 从HSVRGB转换 给定在HSV (h, s, v)值定义一个颜色,带有如上h,和分别表示饱和度和明度s和v变化于01之间,在RGB空间中对应 (r, g, b)三原色可以计算为...使用WriteableBitmap创建HSV色轮 前面介绍了Hsv色轮,也介绍了如何使用WriteableBitmap,那么用WriteableBitmap实现一个HSV色轮是一件很简单事,只需要计算每个像素点距离中心点角度...(Hue)和距离(Saturation)得出HsvColor,再转换成ArgbColor填入WriteableBitmap实现了。

    1.1K30

    win10 uwp 读取保存WriteableBitmap 、BitmapImage 保存 WriteableBitmap 文件从文件读 WriteableBitmapIma

    我们在UWP,经常使用图片,数据结构就是 BitmapImage 和 WriteableBitmap。关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说。...,如果是WriteableBitmap ,那么直接转换 WriteableBitmap 转byte[] bitmap.PixelBuffer.ToArray(); Image 转byte[] 如果我们...;bitmap为null,于是我在网上继续找,好像没看到 UWP 可以转,只有win7 其实大神有说,Image Source是 WriteableBitmap ,于是他就能转。...UWP BitmapImage 不能转换为 byte[] 或 WriteableBitmap 。这句话是错。...,请到win10 uwp 存放网络图片本地 参见:http://www.cnblogs.com/cjw1115/p/5164327.html http://www.cnblogs.com/yuanforprogram

    2K10

    dotnet 读 WPF 源代码笔记 WriteableBitmap 渲染和更新是如何实现

    在 WPF 和 UWP 中提供 WriteableBitmap 是支持对像素写入而更改渲染图片,当然,本文只聊 WPF 源代码,关于 UWP 部分,咱只知道使用就可以。...通过 WriteableBitmap 可以用来实现高性能 CPU 渲染,以下是我其他 WriteableBitmap 博客 WPF 使用 Skia 绘制 WriteableBitmap 图片 WPF...如何在 WriteableBitmap 写文字 WPF 使用不安全代码快速从数组转 WriteableBitmapWriteableBitmap 进行绘制时,有一个重要功能是设置 DirtyRect...虽然这个类命名是双缓存,但实际上做法不是在渲染时候交换两个缓存指针,而是在渲染收集过程,从后面的缓存拷贝数据前面的缓存 以下是 CopyForwardDirtyRects 方法代码,我在代码里面添加了一些注释...,因此可以认为使用 WriteableBitmap 更新,设置 DirtyRect 只影响第二次复制数据性能,而不会影响渲染性能,依然是整个图片进行渲染 在拷贝前面的缓存之后,在 WPF 是在自定义渲染管线里面将前面的缓存作为纹理绘制形状上

    89320

    C# FFmpeg 音视频开发总结

    2、如果需要用Opencv或者C#Emgucv这种库来处理视频流,也多是用FFmpeg做编解码然后再转换图像数据给Opencv去处理。用Opencv编解码延迟很高。...首先是C#使用FFmpeg基本上用是FFmpeg.autogen这个库。...也可以使用FFmpeg.exe,先不谈论FFmpeg.exe大小,我尝试过从exe取数据C#前端显示,相同参数情况下,延迟比使用FFmpeg.autogen高,主要是不能边播放边录制(可以用其它库来录制...3、其次是c# 要将图像数据渲染界面显示,最最好使用WriteableBitmap,将WriteableBitmap和绑定一个Image然后更新WriteableBitmap。...FFmepg.autogen官方样例中有格式转换函数,但由于它没有指定转换格式会出问题(踩坑)。 7、尽量少格式转换,或者帧复制。这两种方式会提高cpu和内存使用率同时也会有更高延迟。

    55750

    win10 uwp 如何创建修改保存位图 创建保存图片在 Image 控件使用WriteableBitmap 转换通过读写像素转换 CanvasBitmap

    UWP 使用底层图像渲染就是使用 Softwarebitmap ,这个类提供直接数据修改,可以使用这个类进行软渲染。...实际上 Softwarebitmap 和 WriteableBitmap 是差不多。但是 Softwarebitmap 可以支持 WriteableBitmap 、 Direct3D 和代码修改。...通过 Softwarebitmap 可以修改转换不同像素格式和透明通道,支持低级修改像素。...作为一个通用底层类在很多性能要求比较高地方用到, CapturedFrame、VideoFrame、FaceDetector。下面来告诉大家如何使用。...转换 上面都是读写文件,如果已经使用了 WriteableBitmap 需要把他转换 SoftwareBitmap 可以使用 SoftwareBitmap 静态函数 SoftwareBitmap.CreateCopyFromBuffer

    2.2K10

    WPF 自己封装 Skia 差量绘制控件

    使用 Skia 能做到在多个不同平台使用相同一套 API 绘制出相同界面效果图片,可以将图片绘制应用程序渲染显示里面。...这样绘制方法显然效率不够高 在上一篇博客里面告诉大家如何在 WPF 中使用 Skia 绘制,请看 WPF 使用 Skia 绘制 WriteableBitmap 图片 而这样绘制方式意味着每次都需要重新绘制画布...Unlock 方法 此时就可以实现在相同 SKSurface 上重复上次绘制内容。...; // 这里 null! 是 C# 新语法,是给智能分析用,表示这个字段在使用时候不会为空 private SKSurface _skSurface = null!...,为什么需要给他这个值,在上文告诉了大家 接下来在 UIElement_OnMouseMove 方法,也就是 Grid 容器收到鼠标划过事件,将划过点作为线段在画布 private

    1.1K30

    UWP 手绘视频创作工具技术分享系列

    Runtime App , 编程语言可以是 C++、C# 或 VB,相信在 UWP 尝试过图形渲染绘制同学们,对 Win2D 都不会陌生,毕竟我我软推荐实现方式。...来看一下应用实现效果,下面三张图显示是一个 SVG 绘制过程: ? ? ? 3....因为位图是没有路径,默认我们没办法像 SVG 那样绘制出它创作过程, 所以我们选择了一种相对简单渲染绘制方法:从图片一个角绘制另一个角,比如左上角右下角,保持稳定速度和方向,这样就由了下图绘制过程...当然上面只是最简单粗暴处理方法,实际场景,很多 SVG 不只包含路径,也会包含位图。例如在 PS 里处理好一张图片,然后导入 AI ,手动划出一些路径,最后导出 SVG。...今天文章先概括介绍一下每个部分实现原理,后面会陆续对每一个部分做详细讲解,尤其是 SVG 和 文字绘制方面,详细原理和实现,以及开发过程遇到各种问题,或自己,或微软系统

    1.3K110

    .NET周刊【6月第5期 2024-06-30】

    文章C#/.NET平台分类存在错误,C#/.NET不应被归类为A组件。文中详细介绍了C#从1.012版本历程,并解释了C#及.NET平台标准化和开源情况。...[WPF]用HtmlTextBlock实现消息对话框内容高亮和跳转 https://www.cnblogs.com/czwy/p/18273976 本文介绍了如何在WPF实现能够局部高亮文字并支持链接跳转消息对话框...特别强调了WPFWriteableBitmap使用两个缓冲区操作方式,以及不同像素格式之间转换问题。...WPF/C#:如何实现拖拉元素 https://www.cnblogs.com/mingupupu/p/18270547 这篇文章介绍了如何在WPF Canvas实现拖放功能。...通过调整纹理坐标和使用数学函数,ceil、sin、round,生成各种网格效果,包括二分网格、四分网格、二值化网格和动态网格。最后扩展线框网格和鼠标操控小球视觉效果,提供具体代码示例。

    14210

    Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好手绘视频应用

    手绘视频应用开发     手绘视频 UWP 应用开发,基于对不同手绘元素,文字,SVG,位图,Ink 等解析,基于 Win2D 渲染方式进行动画展示,并基于类 FFMpeg 方式进行动画视频合成..., 编程语言可以是 C++、C# 或 VB。...SVG 手绘     SVG 元素是一种矢量图形,因为它矢量属性和文件组成,它路径数据可以在手绘视频中被还原和绘制出来,是手绘视频重要元素。    ...我们对位图处理方式,可以实现简单手绘效果,也就是从左上角右下角来匀速涂抹出图片;也可以做进一步处理,比如支持用户在位图背景上做进一步线条勾勒,保存为 SVG,绘制时是背景图被勾勒出来效果;...而 Windows ML 可以实现模型本地化,可以把 Autodraw 训练模型集成在 UWP 应用,减少网络传输时间,降低服务器负载,本地实现计算过程。 7.

    1.2K30

    Windows桌面程序开发

    前言 最近在做Windows桌面程序开发,最初考虑团队技术构成(没有.NET开发),决定用Electron作为解决方案来开发,但是最后因为需要实现应用向其它未处于激活状态应用发消息功能无法通过自带...api实现(需要借助node-ffi调用dll解决),所以就对各个方案做对比做最后决策(其实还是在纠结用C#.net还是Electron,其它方案并不考虑)。...这将使得开发者能够更灵活地将 UWP 中一些更现代化接口引入 WPF 和 Windows Forms 。...],大多数其它第三方编辑器, Sublime, Emacs, 和 VI 同样支持 .NET Core。...在容器化大行其道今天,.NET Core 模块化、轻量级以及它灵活性使得它能很容易地部署容器,容器可以部署到任何平台, 云上、Linux 和 Windows 上。

    10.8K10

    UWP 手绘视频创作工具技术分享系列 - 全新 UWP 来画视频

    但是由于来画平台和 UWP 创作工具功能和形式差异,这一需求一直到这个版本才得到实现。...把位置信息、动画信息等转换UWP 创作工具可以使用格式,完成后用户就可以在创作工具中使用这个模板了。 全新创作工具 1. 工具分组 ?...全新图片编辑功能 过去我们也讲过,SVG 相比于 PNG,在手绘视频表现形式更丰富,因为 SVG 有路径信息,而 PNG 没有。...通常用户想做这个操作,需要先在 PS 里对图片做编辑操作,然后倒入 AI ,描绘路径后保存为 SVG 文件,再导入到来画视频。而现在在来画视频中就可以完整整个操作过程。 ?...好了,全新 UWP 来画视频就介绍这里,欢迎大家在 Microsoft Store 搜索“来画”下载使用,如果大家对 UWP 技术实现感兴趣,欢迎和我们交流,谢谢!

    90680

    如何组织一个同时面向 UWPWPF.Net Core 控制台 C# 项目解决方案

    如何组织一个同时面向 UWP/WPF/.Net Core 控制台 C# 项目解决方案 2017-10-21 03:20 希望写一个小型工具...考虑代码尽可能复用,我准备采用 .Net Standard 来编写大多数核心代码,并基于 .Net Core 编写跨平台控制台入口,用 WPF 编写桌面端 UI 入口,用 UWP 作为可上架商店...阅读本文将了解何在尽可能复用代码情况下组织这样 C# 解决方案。...组织一个 C# 解决方案 我们总共涉及 Visual Studio 项目类型有这五个: 类库(.NET Standard) 共享项目 控制台应用(.NET Core) WPF 应用(.NET Framework...我们主要逻辑代码全在 .NET Standard 项目中。这里包含了完整功能实现,可以脱离其他四种实现完整功能。

    1.5K10
    领券