GMF:如何在不打开Editor的情况下生成图片
问题
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的实现
Binhua Liu原创,写于2013/8/31。
GMF:如何在不打开Editor的情况下生成图片的更多相关文章
- 在打开Dreamweaver软件情况下,vs2010 asp项目无法调试
会出现以下情况,只要关闭Dreamweaver就可以正常调试vs2010 asp项目.
- python requests访问https的链接,不打开fiddler的情况下不报错;若是打开fiddler则报ssl错误,请求中添加verify=False,会报警告;若不想看到警告,有3种方式;
import requests# import warnings# warnings.filterwarnings("ignore") #方法一#requests.packages ...
- 在不打开excel的情况下用python执行excel
import win32com.client import time path = r'absolute dir' #比如填文件的绝对路径,比如d:/file/stock.xlsx xl = win3 ...
- [httpd] httpd server 在低负载的情况下对SYN无响应
如题: 两台client通过load balance访问httpd server.两个client交互访问.load balance处于fullnat模式. server在低负载情况下,常常对某一个c ...
- php 502 无错误行和报错文件的情况下使用gdb调试方法
lnmp环境 gdb /usr/local/php5.2/bin/php-cgi /tmp/coredump-php-cgi.20503 source /home/tmp/lnmp1.4-full ...
- 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...
- 在不损坏C盘的情况下为C盘扩容,适用于Win
2016年12月29日14:29:27 参考原文:http://jingyan.baidu.com/article/90808022a6c6b7fd91c80fc8.html 在不损坏磁盘的情况下给某 ...
- 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案
问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...
- 什么情况下会用到try-catch
本文不区分语言,只为记录一次有收获的面试. 面试官:什么情况下用到try-catch?程序员:代码执行预料不到的情况,我会使用try-catch.面试官:什么是预料不到的情况呢?程序员:比如我要计算a ...
随机推荐
- NBUT比赛 方格规律递推题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26901#problem/A 题意:有一个 2*n的格子里,你可以选择任意一个格 ...
- Cookie工具类
import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet ...
- php extension memcache and memcached module on centos6
环境 centos6 php5.6 nginx 1.8 防火墙均关闭 我在这里简单描述一下过程 #install nginxyum -y install pcre pcre-devel openssl ...
- LDA 初见(JGibbLDA-v.1.0 eclipse使用)
参考:Eclipse下使用JGibbLDA使用总结 一.下载和初次使用JGibbLDA 1.导入JGibbLDA-v.1.0项目(参考上面链接) 2.在LDA.java右键“run”--->“r ...
- Android课程---布局管理器之相对布局(一)
下面示例的是在父容器里如何设置按钮的位置,难度:***,重点是找到一个主按钮,设置它的id,然后根据它来设置其他按钮在父容器的位置. 代码示例: <?xml version="1.0& ...
- Java Collection框架详解
引用自:http://blog.sina.com.cn/s/blog_6d6f5d7d0100s9nu.html 经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashS ...
- scp使用加密算法报错unknown cipher type
为了提高scp的传输速度指定了scp的加密算法为arcfour $ scp -c arcfour localFile userName@remoteIP:remoteFile 得到报错unknown ...
- 解决JQuery EasyUI onLoadSuccess执行两次的问题
今天使用EasyUI的datagrid时发现首次打开页面时onLoadSuccess方法执行了两次.后来发现主要问题是datagrid被初始化了两次.主要原因是一开始html中声明了dg为easyui ...
- iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案—scrollIntoView()
问题描述 iOS系统下,移动web页面,inpu获取焦点弹出系统虚拟键盘时,偶尔会出现挡住input的情况,尽管概率不大,但是十分影响用户体验. 问题重现 原始页面:页面中有header.main.f ...
- 前台 JSON对象转换成字符串 相互转换 的几种方式
在最近的工作中,使用到JSON进行数据的传递,特别是从前端传递到后台,前台可以直接采用ajax的data函数,按json格式传递,后台Request即可,但有的时候,需要传递多个参数,后台使用requ ...