使用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++的函数耗时以及代码片段耗时详情