您的位置:首页 > 编程语言 > Java开发

为已有的Java图形程序增加储存WMF矢量文件功能

2008-04-25 22:48 441 查看
Java提供了将图形转储为jpg格式的功能, 但这种格式不是矢量格式,没办法在word等软件中修改,编辑。
word中的矢量图形格式是WMF(WindowsMetaFile)。这种格式主要由一个或两个informationheaders组成,结构如下:
typedefstruct_WindowsMetaHeader{WORDFileType;/*Typeofmetafile(0=memory,1=disk)*/WORDHeaderSize;/*SizeofheaderinWORDS(always9)*/WORDVersion;/*VersionofMicrosoftWindowsused*/DWORDFileSize;/*TotalsizeofthemetafileinWORDs*/WORDNumOfObjects;/*Numberofobjectsinthefile*/DWORDMaxRecordSize;/*ThesizeoflargestrecordinWORDs*/WORDNumOfParams;/*NotUsed(always0)*/}WMFHEAD;
除了headers之外下面就是文件记录(StandardMetafileRecords)。结构如下:
typedefstruct_StandardMetaRecord{DWORDSize;/*TotalsizeoftherecordinWORDs*/WORDFunction;/*Functionnumber(definedinWINDOWS.H)*/WORDParameters[];/*Parametervaluespassedtofunction*/}WMFRECORD;也就是说每一个record中储存的是WindowsGDI绘图函数的代码及每个函数对应的参数.这样的
话整个WMF文件就由这样的函数编码与参数组成。就像下面这样:
RecordNameFunctionNumberAbortDoc0x0052Arc0x0817Chord0x0830DeleteObject0x01f0Ellipse0x0418
...
了解了WMF文件的格式,我们就清楚我们如何将我们的图形储存为WMF格式了。我们知道在
Java中所有的绘图操作都是通过Graphics来完成的。基本上Graphics中的每一个绘图函数
在WindowsGDI中都有对应,我们只需继承一个Graphics类,重载它的每一个方法,转成
对应的WindwosGDI函数,就可以达到我们的目的了。
Graphics中的函数很多,工作量巨大,不用怕,网上已有人写好了,大家请到:
http://piet.jonas.com去下载一个WMFWriter吧。
下载后,将它加到classpath,再请使用我写的这个类,轻松的将你的图形存为WMF格式:
/**
*Copyright:Copyright(c)2002
*Company:
*@authorTurboChen

*@version1.0

*/

publicclassWMFWriter
{
/**comp是你的图形所在的JComponent,out是你指定的输出流

publicvoidwrite(JComponentcomp,OutputStreamout)throwsException
{
try
{
intw=comp.getSize().width;
inth=comp.getSize().height;
WMFWMF=newWMF();
WMFGraphicsWMFgraphics=newWMFGraphics(WMF,w,h);
comp.paint(WMFgraphics);
WMF.writePlaceableWMF(out,0,0,w,h,Toolkit.getDefaultToolkit().getScreenResolution());
WMFgraphics.dispose();
out.close();
}
catch(Exceptionexception)
{
thrownewException("GRAPHICSERROR,CANNOTCREATEWMFFORMAT");
}
}
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐