GMF:如何在不打开Editor的情况下生成图片
发布日期:2022-03-13 05:36:11 浏览次数:12 分类:技术文章

本文共 1579 字,大约阅读时间需要 5 分钟。

问题

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 block	e.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 block	e.printStackTrace();	return null;}finally {        shell.dispose();}

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

 

原创,写于2013/8/31。

转载于:https://www.cnblogs.com/Binhua-Liu/p/3292984.html

转载地址:https://blog.csdn.net/weixin_30323961/article/details/98229233 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:前端试题1
下一篇:客户、产品、渠道、时机,浅析CPCT精细化运营策略

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月24日 22时27分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Leetcode 662. 二叉树最大宽度(DAY 20) 2019-04-27
Leetcode 面试题 04.05. 合法二叉搜索树(DAY 20)(迭代中序遍历) 2019-04-27
Leetcode 1028. 从先序遍历还原二叉树(DAY 21)(划开新时代 Hard第一题 Hard含题解) 2019-04-27
Leetcode 99. 恢复二叉搜索树(DAY 22 Hard含题解) 2019-04-27
Leetcode 297. 二叉树的序列化与反序列化(DAY 23)(Hard细节挺多的 需要调试一会 含题解) 2019-04-27
Leetcode 1641. 统计字典序元音字符串的数目(DAY 24 动态规划开始 ---鸽子一星期准备考试)----动态规划学习期 2019-04-27
Leetcode 338. 比特位计数(DAY 25高数线代终于考完)----动态规划学习期 2019-04-27
Leetcode 1402. 做菜顺序(DAY 25 Hard 含题解)----动态规划学习期 2019-04-27
Leetcode 1025. 除数博弈(DAY 25)---- 动态规划学习期 2019-04-27
Leetcode 303. 区域和检索 - 数组不可变(DAY 25) ---- 动态规划学习期 2019-04-27
Leetcode 剑指 Offer 42. 连续子数组的最大和(DAY 25)---- 动态规划学习期 2019-04-27
Leetcode 121. 买卖股票的最佳时机(DAY 26) ---- 动态规划学习期 2019-04-27
Leetcode 746. 使用最小花费爬楼梯(DAY 26) ---- 动态规划学习期 2019-04-27
Leetcode 面试题 17.16. 按摩师(DAY 26) ---- 动态规划学习期 2019-04-27
Leetcode 70. 爬楼梯(DAY 26) ---- 动态规划学习期 2019-04-27
Leetcode 392. 判断子序列(DAY 26)---- 动态规划学习期 双百解法 2019-04-27
Leetcode 面试题 08.01. 三步问题(DAY 26) ---- 动态规划学习期 2019-04-27
Leetcode 877. 石子游戏(DAY 27) ---- 动态规划学习期 2019-04-27
Leetcode 714. 买卖股票的最佳时机含手续费(DAY 27) ---- 动态规划学习期 2019-04-27
Leetcode 96. 不同的二叉搜索树(DAY 28) ---- 动态规划学习期 (含题解) 2019-04-27