使用C++进行SVG开发
来源:互联网 发布:武汉大学数据库 编辑:程序博客网 时间:2024/04/29 06:33
进行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 <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;
}
好了,告诉大家思路了,也演示过了,大家好好玩。
- 使用C++进行SVG开发
- [HTML5-SVG]基于SVG技术进行WebGIS开发浅析
- 使用Batik开发SVG应用程序
- 如何使用 SVG 进行缩放和平移
- 使用SVG进行矩形描边
- 使用Eclipse Juno进行C/C++开发
- 使用VScode进行C/C++开发
- 使用Batik开发SVG应用程序(一)
- 使用Batik开发SVG应用程序(二)
- 使用Batik开发SVG应用程序(一)
- SVG使用
- SVG使用
- 使用ARM标准C库进行嵌入式应用程序开发[转]
- 使用ARM标准C库进行嵌入式应用程序开发
- 使用ARM标准C库进行嵌入式应用程序开发
- 使用ARM标准C库进行嵌入式应用程序开发---转
- 使用ARM标准C库进行嵌入式应用程序开发
- 使用ARM标准C库进行嵌入式应用程序开发
- Linux 文件权限
- 我所制作的电子图书-程序方面
- TOMCAT无故停止的下策
- ping nbtstat netstat tracert net at ftp telnet命令的使用方法
- DWR上手指南
- 使用C++进行SVG开发
- 论 "张筱雨"
- 网络命令的使用方法2
- 创建服务器控件(表格)
- Linux SVN的安装使用笔记
- Java中文问题及最优解决方案(本地化)
- 快速修改网卡物理地址二则
- 让我们牢记这一刻!
- 关于非模态对话框的销毁(转)