问题

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的情况下生成图片的更多相关文章

  1. 在打开Dreamweaver软件情况下,vs2010 asp项目无法调试

    会出现以下情况,只要关闭Dreamweaver就可以正常调试vs2010 asp项目.

  2. python requests访问https的链接,不打开fiddler的情况下不报错;若是打开fiddler则报ssl错误,请求中添加verify=False,会报警告;若不想看到警告,有3种方式;

    import requests# import warnings# warnings.filterwarnings("ignore") #方法一#requests.packages ...

  3. 在不打开excel的情况下用python执行excel

    import win32com.client import time path = r'absolute dir' #比如填文件的绝对路径,比如d:/file/stock.xlsx xl = win3 ...

  4. [httpd] httpd server 在低负载的情况下对SYN无响应

    如题: 两台client通过load balance访问httpd server.两个client交互访问.load balance处于fullnat模式. server在低负载情况下,常常对某一个c ...

  5. php 502 无错误行和报错文件的情况下使用gdb调试方法

    lnmp环境 gdb  /usr/local/php5.2/bin/php-cgi  /tmp/coredump-php-cgi.20503 source /home/tmp/lnmp1.4-full ...

  6. 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...

  7. 在不损坏C盘的情况下为C盘扩容,适用于Win

    2016年12月29日14:29:27 参考原文:http://jingyan.baidu.com/article/90808022a6c6b7fd91c80fc8.html 在不损坏磁盘的情况下给某 ...

  8. 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案

    问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...

  9. 什么情况下会用到try-catch

    本文不区分语言,只为记录一次有收获的面试. 面试官:什么情况下用到try-catch?程序员:代码执行预料不到的情况,我会使用try-catch.面试官:什么是预料不到的情况呢?程序员:比如我要计算a ...

随机推荐

  1. for memory long term update

    xargs是一条Unix和类Unix操作系统的常用命令.它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题. #例如,下面的命令: rm `find /path -type f ...

  2. PNG格式的图像文件,创建的图像的MIME类型的头部

    在安装完这三个组件后,还需要重新配置一次PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一.运行make clean,然后在当前的配置中添加下面的内容: --with-gd=[/path/t ...

  3. IOS彩票第一天基本框架搭建

    *****初始化 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionar ...

  4. IOS第八天(2:UITableViewController团购,点击底部,xib加载更多, 代理模式)

    ******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import ...

  5. HTTP常见错误代码总结

    1.HTTP 401 用户验证失败.不允许继续访问 2.HTTP 403 禁止访问,访问web应用,没有指定要访问页面的名称 3.HTTP 404 请求的文件找不到,一般情况是在浏览器输入地址时,输入 ...

  6. socket详解

    <?php /* * * socket主要翻译为套接字 * socket_accept — Accepts a connection on a socket * 接受一个socket链接 * s ...

  7. ExtJS笔记 Ext.data.Model

    A Model represents some object that your application manages. For example, one might define a Model ...

  8. lr并发量和迭代的区别

    1.并发量 并发量也就是同时运行的量.比如100个用户同时登录,那么并发量就是100.当然这100个用户可以进行参数化,也可以采用设置虚拟用户数(vuser). 2.迭代 迭代就是单个用户运行的次数. ...

  9. Android RecyclerView的基本使用

    Android RecyclerView 在去年的Google I/O大会上就推出来了,以前经常使用的ListView 继承的是AbsListView,而RecyclerView则直接继承 ViewG ...

  10. 【MySQL学习笔记】MySQL权限表

    MySQL权限表,控制用户对数据库的访问,存在mysql数据库中,由mysql_install_db初始化,包括user,db,host,tables_priv,columns_priv,procs_ ...