用Direct2D绘制SVG (2)

Direct2d其实是可以直接Load和Draw SVG图形的。


首先需要从renderTarger, QueryInterface 到 ID2D1DeviceContext5
再从ID2D1DeviceContext5, CreateSvgDocument获得 ID2D1SvgDocument
(中间涉及到File到IStream,需通过HGLOBAL做桥)
最后ID2D1DeviceContext5直接DrawSvgDocument即可

然而问题还在:
1.大公司小小软的这个内置的SVG功能,比nanosvg高不到哪里,一样,只能支持SVG v1.1,
因此绘制出来的效果一样,仅仅是基本图形的显示而已。

2. 而且ViewPoint的功能甚至还不如nanosvg,无法直接获取SVG文件的原始尺寸。鄙视MS

但Direct2D内置了n多的Effect效果,只要与SVG Filter做个转接,
理论上有希望实现比较可观的显示效果。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 可以使用 Batik 库来绘制 SVG。Batik 是一个开源的 Java 库,用于处理 SVG 文件。它提供了一组 API,可以将 SVG 文件转换为 Java2D 命令,以便在 Java 应用程序中显示和操作 SVG 图像。 以下是一个简单的例子,演示如何使用 Batik 库在 Java 中绘制 SVG: ```java import org.apache.batik.dom.svg.SVGDOMImplementation; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; public class SVGDemo { public static void main(String[] args) throws Exception { // 创建 SVG 文档 DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation(); Document document = domImpl.createDocument(SVGDOMImplementation.SVG_NAMESPACE_URI, "svg", null); Element svgRoot = document.getDocumentElement(); // 绘制一个矩形 Element rectangle = document.createElementNS(SVGDOMImplementation.SVG_NAMESPACE_URI, "rect"); rectangle.setAttributeNS(null, "x", "10"); rectangle.setAttributeNS(null, "y", "10"); rectangle.setAttributeNS(null, "width", "100"); rectangle.setAttributeNS(null, "height", "50"); rectangle.setAttributeNS(null, "fill", "red"); svgRoot.appendChild(rectangle); // 保存 SVG 文件 FileOutputStream fos = new FileOutputStream("output.svg"); Writer out = new OutputStreamWriter(fos, "UTF-8"); document.write(out); out.flush(); out.close(); } } ``` 这个例子创建了一个 SVG 文档,并在其中绘制了一个红色矩形。最后将 SVG 文件保存到 output.svg 文件中。 注意,这个例子只是一个简单的演示,实际上可以使用 Batik 库绘制复杂的 SVG 图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值