使用C++进行SVG开发

Posted 小哈龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C++进行SVG开发相关的知识,希望对你有一定的参考价值。

 进行SVG开发的时候,可以使用的语言有很多钟。其中,JAVA对SVG的支持比较好,而且有相应的开发包。这里就不讲JAVA方面,主要讲一下使用C++进行SVG方面的开发。 不懂SVG的先看我博客的两篇关于SVG方面的文章再来看这篇文章。

  SVG是基于XML的可扩展矢量图形。说简单了,它是一个规范,跟C++语言一样。大家只要按照这个规范去编写,SVG解析器就能够把你编写的文件解析并渲染成图形。从这个层面来说,SVG是属于一门语言。

   既然它的基础是XML,所以我们只要按照XML的方式来操作SVG文件就OK了,当然,前提是,变量命名和部分格式我们要遵从SVG的规范,因为SVG是XML文件,但XML就不一定是SVG文件啦。所以,我们采用C++进行SVG开发时,就是在遵从SVG规范的前提下,以操作XML的方式来操作SVG文件就OK了。

  知道怎么去操作SVG了,我们下一步要做的是寻找如何操作XML的方法,只要知道如何操作XML,就知道如何操作SVG。我们并不需要自己去动手去编写一个XML解析器。目前比较多人用的XML解析器是VC自带的一个组件,具体名称我忘记了,因为我比较注意的是平台无关性的技术;一个是IBM的Xerces C,该方法支持完整的XML规范,只是有个缺点,既你一下子要加载12M的内存模块;最后一个是使用开源类tinyxml类啦,这也是我要介绍的方式。

  tinyxml是一个开源的类,你可以将它使用到商业的开发中。我的资源中有个tinyxml的版本可以下载,如果要最新的可以到官方去下。

下面是我写的一个使用tinyxml操作SVG文件的一个例子


 

 #include  " stdafx.h "
#include  < iostream >
#include  " tixml.h "
 using   namespace  std;

 int  main( int  argc,  char *  argv[])
 {
/生成SVG文件的框架//
    string temp,tempstring;
    CString tempstr;
     //生成SVG文件框架
    tempstr.Format("<?xml version="1.0"  standalone='no' > "
    "<!-- IBoard SVG File -->"
    "<svg height="%d" width="%d"> "
    "<!-- SVG File --> "
    "</svg>",height,width);
    temp.append(tempstr);

    const char* demoStart=temp.data();
    //若文件名不为空
    if(filename!="")
      tempstring.append(filename);
    else
        tempstring.append("iboardfile.svg");
     
    const   char *FileName=tempstring.data();
    TiXmlDocument doc( FileName );
    doc.Parse( demoStart );

    if ( doc.Error() )
    {
        AfxMessageBox("some error ,fix here");    
        return -1;
    }
    else
       doc.SaveFile();
//


/使用tinyxml操作SVG文件/
    TiXmlDocument doc1("iboardfile.svg");
    bool loadOkay = doc.LoadFile();
    if(!loadOkay )
    {
        return FALSE;
    }
    TiXmlNode* node = doc.FirstChild( "svg" );
    assert(node);
    //向SVG文件插入一个圆
    TiXmlElement child("ellipse");
    child.SetAttribute("cx","50");
    child.SetAttribute("cy","50");
    child.SetAttribute("rx","100");
    child.SetAttribute("ry","100");
    child.SetAttribute("style","fill:Red;stroke:red");
    node.InserEndChild(child);
    doc1.SaveFile();
    /插入圆成功,保存文件
    return 0;
}

好了,告诉大家思路了,也演示过了,大家好好玩。
————————————————
版权声明:本文为CSDN博主「Feisy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Feisy/article/details/2459004

以上是关于使用C++进行SVG开发的主要内容,如果未能解决你的问题,请参考以下文章

前端开发常用代码片段(中篇)

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

QT 实用代码片段

在PaddlePaddle中的Notebook代码片段

text 使用SVG的片段