利用org.eclipse.draw2d.SWTGraphics类和org.eclipse.swt.graphics.ImageLoader类可以实现把画布导出到图片文件的功能,原理是在内存里创建一个空白的Image,然后把Diagram画到它上面,最后保存到指定文件和格式。

我们可以把导出工作分为两部分,第一部分负责提供要导出的IFigure实例(若要导出整个画布,应从GraphicalViewer获得PRINTABLE_LAYERS,否则会丢失画布上的连线),并负责将得到的图片数据写入文件;第二部分负责IFigure实例到图片数据的转换过程。以下是前者的示例代码:

String filename = ...;
PracticeEditor editor = ...;
ScalableFreeformRootEditPart rootPart = ...;
IFigure figure = rootPart.getLayer(ScalableFreeformRootEditPart.PRINTABLE_LAYERS);//To ensure every graphical element is included
byte[] data = createImage(figure, SWT.IMAGE_PNG);
try {FileOutputStream fos = new FileOutputStream(filename);fos.write(data);fos.close();
} catch (IOException e) {e.printStackTrace();
}

上面代码里调用的createImage()方法是实际在内存里作画并转换为可写入为文件的二进制流的地方,代码如下所示:

private byte[] createImage(IFigure figure, int format) {Rectangle r = figure.getBounds();ByteArrayOutputStream result = new ByteArrayOutputStream();Image image = null;GC gc = null;Graphics g = null;try {image = new Image(null, r.width, r.height);gc = new GC(image);g = new SWTGraphics(gc);g.translate(r.x * -1, r.y * -1);figure.paint(g);ImageLoader imageLoader = new ImageLoader();imageLoader.data = new ImageData[] { image.getImageData() };imageLoader.save(result, format);} finally {if (g != null) {g.dispose();}if (gc != null) {gc.dispose();}if (image != null) {image.dispose();}}return result.toByteArray();
}

点此下载工程,此工程修改自GEF应用实例中的GefPractice,目标文件的扩展名为.gefpractice不变。


图1 运行后增加了导出功能按钮

本文转自博客园八进制的博客,原文链接:GEF常见问题8:导出到图片,如需转载请自行联系原博主。

GEF常见问题8:导出到图片相关推荐

  1. jsonhandle主界面没有显示格式_怎么将图纸导出成图片格式保存

    怎么将图纸导出成图片格式保存呢?接下来将与大家分享一下有关CAd图纸转换成图片进行保存的方法. 方法/步骤 为了实现CAd转图片操作,首先我们需要在电脑上安装一个CAD编辑软件,如图所示: 待CAD编 ...

  2. php导出照片,TP5导出excel图片和数据--先下载图片到本地服务器

    ## :-: TP5导出excel图片和数据--先下载图片到本地服务器 ~~~ public function Export( ) { set_time_limit(0); ini_set('memo ...

  3. OxyPlot 导出图片及 WPF 元素导出为图片的方法

    OxyPlot 导出图片及 WPF 元素导出为图片的方法 目录 OxyPlot 导出图片及 WPF 元素导出为图片的方法 一.OxyPlot 自带导出方法 二.导出 WPF 界面元素的方法 三.通过附 ...

  4. JavaFX将Node导出为图片

    转载自   JavaFX将Node导出为图片 在JavaFX中提供了一个很实用的功能.我们可以将任意节点截图导出. 代码如下: WritableImage image = mapCanvas.snap ...

  5. java blob转为图片_导出的图片为什么会糊?!

    文章:李蕊(成都中心) 排版:陈倩 背景: 某天我收到来自公司首席设计师的一则钉钉消息:轻设计编辑器导出的图片为什么会模糊?当我看到这个问题时,脑海中不禁产生了下面的疑问:怎么会模糊呢?是不是添加到编 ...

  6. 大多数人不敢想的PDF操作:添加书签,电子签名,压缩,修改文字,提取部分页面为新文件、批量导出为图片

    目录 PDF神仙级软件和网站(免费) PDF加书签 PDF电子签名 PDF文件压缩 修改PDF内的文字 提取部分页面为新PDF文件 PDF批量导出为图片 PDF神仙级软件和网站(免费) 主要以比较方便 ...

  7. PDF文件如何导出成图片,PDF如何转换成图片

    现在的pdf应用得很广泛,由于它可以不依赖操作系统的语言和字体及显示设备,阅读起来很方便.我们在工作中几乎每天都会使用到PDF文件,有时候我们需要将PDF文件导出成图片格式的文件,这样更方便我们使用. ...

  8. java中Excel导出echart图片

    java中Excel导出echart图片 1.在生成echart的前端代码生成图片代码后Echart.setOption(captestRcapEchartOption, true);后面加上以下代码 ...

  9. CAD怎么导出为图片?一分钟解决

    CAD软件是广泛应用于制图和设计领域的工具.在使用CAD软件时,有时需要将制作好的CAD导出为图片格式,以便在其他应用程序或文档中使用.本文将介绍如何使用CAD软件来导出图片. 以下是一些可以将CAD ...

最新文章

  1. OSChina 周六乱弹 —— 就少个接吻的女友了
  2. AI吉尼斯:那些你不知道的人工智能之“最”
  3. win10桌面计算机打不开,win10系统桌面图标打不开的解决技巧
  4. linux之setsid命令
  5. qa/qc_专业QA如何实施可靠的CI / CD管道?
  6. 手把手教你求职进入BAT
  7. java程序单引号报错,javapoigetInpuStream报错br/是这样的, 爱问知识人
  8. 昭通高考2021成绩查询,昭通中考成绩查询2021
  9. oracle 命令分析
  10. Greensock平台
  11. 中达优控触摸屏编程视频教程_中达优控触摸屏软件下载 YKBuilder(中达优控触摸屏编程软件) v5.0.200 官方安装免费版 下载-脚本之家...
  12. 关于Canvas 常用API汇总
  13. 计算机到期收益率公式,用到期收益率计算债券价格
  14. 小心!QQ和MSN聊天记录也会随时被监控
  15. 1032:大象喝水 题解 信息学奥赛 NOIP
  16. reactos操作系统实现 2
  17. java练习-String类、StringBuilder类、StringBuffer类10
  18. 最新微信QQ域名防封、微信群活码系统
  19. Toolbar与DrawerLayout
  20. 字符串中的截取,分割,转换方法

热门文章

  1. SpringMVC源码解析 - HandlerAdapter - HandlerMethodArgumentResolver
  2. [1]-skyeye-1.3.1的编译与安装
  3. 一个页面标题和过滤输出的解决方案(下)
  4. 个人博客二|创建项目
  5. 反编译插件jadclips
  6. 4月份阿里云ECS和VPC升级公告
  7. iOS autolayout
  8. Android 定制RadioButton样式
  9. 刚装oracle, 熟悉一下命令
  10. 彻底理解C#中值类型和引用类型的区别