Canvas 画布上SVG文件中的省道绘制id

Canvas 画布上SVG文件中的省道绘制id,canvas,svg,dart,Canvas,Svg,Dart,我想加载一个svg,根据id提取一个组,然后将其绘制到画布上 如果文件是图像,我会: _image = new html.ImageElement() ..src = src; _canvas.context2D.drawImageScaledFromSource(_image, ox, oy, ow, oh, x, y, w, h) 我想用svg文件做同样的事情,我想从svg文件中选择要绘制的id。使用多个ID绘制画布的不同部分 现在我有: var groupToDraw;

我想加载一个svg,根据id提取一个组,然后将其绘制到画布上

如果文件是图像,我会:

_image = new html.ImageElement()
        ..src = src;
_canvas.context2D.drawImageScaledFromSource(_image, ox, oy, ow, oh, x, y, w, h)
我想用svg文件做同样的事情,我想从svg文件中选择要绘制的id。使用多个ID绘制画布的不同部分

现在我有:

var groupToDraw;
HttpRequest.getString("img.svg").then((text) {
    svg.SvgElement pimage = new svg.SvgElement(text);
    groupToDraw = pimage.querySelector("#ID");
}
但我不知道如何在屏幕上绘制这个元素。还有一些组引用了文件其他部分中的模式,尽管我现在可以跳过它们

如果在pyQt中这样做有帮助,我做了:

renderer = QSvgRenderer(path)
pix = QtGui.QPixmap(width, height)
pix.fill(Qt.transparent)
painter = QtGui.QPainter(pix)
renderer.render(painter, id)

如果从文件中加载一些svg文本并从该字符串创建svg元素,则可以看到元素上的ID:

var fileID;
HttpRequest.getString('file.svg').then((text) {
  svg.SvgElement temp = new svg.SvgElement.svg(text);
  fileID = temp.id;
});  
然后,您可以通过查询组的id来创建组元素,用字符串中的SVG标记围绕GElement,从该字符串和该blob创建blob和URL,然后从URL创建ImageElement并在画布上绘制图像:

svg.GElement g = temp.querySelector("#id2");

var str = '<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="32px"   
  height="32px" viewBox="0 0 32 32">${g.innerHtml}</svg>';

var blob = new Blob([str], "image/svg+xml;charset=utf-8");
var url = Url.createObjectUrlFromBlob(blob);

img = new ImageElement(src: url)
    ..onLoad.listen((Event e) { ctx.drawImage(img, 0, 0); });
svg.GElement g=temp.querySelector(“#id2”);
var str='${g.innerHtml}';
var blob=newblob([str],“image/svg+xml;charset=utf-8”);
var url=url.createObjectUrlFromBlob(blob);
img=新的ImageElement(src:url)
..onLoad.listen((事件e){ctx.drawImage(img,0,0);});

我现在离你更近了,谢谢你。第一个代码用于获取SvgElement。不过,我只想从文件中画一个“”。我可以使用for循环或.querySelector()提取它,但是我不知道如何在画布上只绘制该元素。还有什么建议吗?