使⽤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() )
svg图形
{
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;
}
好了,告诉⼤家思路了,也演⽰过了,⼤家好好玩。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论