以下来自DelphiPraxis论坛pyscripter
我不知道很多知道,因为Windows更新创作者工具,SVG解析和画是原生支持,是Direct2D中的一部分。我想测试此Windows功能,但是,第一个障碍是Delphi附带的Direct2d标头非常老。
https://quality.embarcadero.com/中有两张公开投票 。
缺少Direct2D 1.1支持(自XE7开始开放!)
https://quality.embarcadero.com/browse/RSP-10159
缺少Direct2D 1.2和1.3支持
https://quality.embarcadero.com/browse/RSP-21071
SVG解析和绘画自MS Windows Creators
https://docs.microsoft.com/en-us/windows/win32/direct2d/svg-support以来,它本身就受支持并且是Direct2D的一部分
您可能想要投票给他们,因为缺乏良好的Direct2D支持(包括DirectWrite),这有点遗憾。
然后,我查看了其他Direct2D转换,发现其中两个定期更新。
https://github.com/FactoryXCode/MfPack/tree/Master/MfPack
https://github.com/CMCHTPC/DelphiDX12
他们俩都有一些问题,但这是一个好的开始。事实证明,将svg文件解析和绘制到Canvas非常简单。一旦建立了渲染器(Vcl.Direct2d做到了这一点,但是很容易从头开始),您就可以用两行代码来完成所有工作。
fDeviceContext5.CreateSvgDocument(fStream,D2D1SizeF(ClientWidth,ClientHeight),fsvgDocument);
fDeviceContext5.DrawSvgDocument(fsvgDocument);
您可以通过以下方式检查Svg是否受支持:
如果Supports(rt,ID2D1DeviceContext5,fDeviceContext5)然后
...
则很容易进行缩放,不透明度,旋转,重新着色等操作。质量和速度似乎不错,但是存在一些限制,最重要的是我认为是缺少对text元素的支持。我附上了我的测试项目的源代码(没有依赖项),以防有人想玩它。Svg在调整表单大小时自动缩放。
https://en.delphipraxis.net/applications/core/interface/file/attachment.php?id=2648
关于用于SVG创建的Affinity Suite工具
https://youtu.be/UVqJIaMlB6E
TMS VCL UIPack支持SVG的SVG
GitHub项目支持
https://github.com/EtheaDev/SVGIconImageList
https://github.com/EtheaDev/IconFontsImageList
https://github.com/publicjoke/freepascal_resvg
SVGIconImageList:现在还可以使用链接到TSVGIconImageCollection的本机VirtualImageList(从10.3或10.4开始)!
如果您使用的是较早的Delphi版本,则可以使用TSVGIconsVirtualImageList。欢迎加入Delphi开发局QQ群:32422310 Delphi控件源码下载网站