gmf java_[Java教程]GMF:如何在不打开Editor的情况下生成图片

[Java教程]GMF:如何在不打开Editor的情况下生成图片

0 2013-08-31 12:00:13

问题

GMF应用中,有时我们希望在不打开*DiagramEditor的情况下,从文件就能生成它的图片

解决方案

首先,从文件中构造DiagramImpl实例: TransactionalEditingDomain domain = GMFEditingDomainFactory.getInstance().createEditingDomain();IFile pageFile = project.getFile("/diagram/file/path");DiagramImpl diagramImpl = DiagramModelLoader.getDiagramFromFile(pageFile, domain);

然后调用CopyToImageUtil的copyToImageByteArray方法,生成图片的buffer。try {CopyToImageUtil copyToImageUtil = new CopyToImageUtil();byte[] buffer = copyToImageUtil.copyToImageByteArray(diagramImpl, 800, 800, ImageFileFormat.PNG, new NullProgressMonitor(),PreferencesHint.USE_DEFAULTS, true);return buffer;} catch (CoreException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}

copyToImageByteArray会先检查该diagramImpl对应的Editor是否已经打开,如果已经打开,则从Editor中生成图片;否则,它会在一个独立的shell中生成一个Editor,然后从它生成图片,这都是在后台进行的。 但它有个问题,或者说是bug:如果已经打开的Editor和diagramImpl对应的文件并不相同,它也会认为Editor已经打开了,那么,生成的图片就牛头不对马嘴了。解决办法是把以上代码改为:Shell shell = new Shell();try { CopyToImageUtil copyToImageUtil = new CopyToImageUtil(); DiagramEditPart diagramEditPart = copyToImageUtil.createDiagramEditPart(pageDescriptor.getDiagram(),shell, PreferencesHint.USE_DEFAULTS); Assert.isNotNull(diagramEditPart); return copyToImageUtil.copyToImageByteArray(diagramEditPart, null, 800, 800, ImageFileFormat.PNG, new NullProgressMonitor(), true);} catch (CoreException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}finally { shell.dispose();}

其实以上代码参考了copyToImageByteArray的实现

Binhua Liu原创,写于2013/8/31。

本文网址:http://www.shaoqun.com/a/69557.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

图片

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值