`
cameliia
  • 浏览: 11058 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

GEF:导出到图片

    博客分类:
  • GEF
阅读更多

声明:此文章参考自八进制在博客园发表的"GEF常见问题8:导出到图片 "一文,原文地址为:http://bjzhanghao.cnblogs.com/category/36197.html

 

本人较懒,且相关知识八进制前辈的文中已有说明,不再累赘,直接贴代码:

 

 

 public void run() {
     FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.SAVE);   
     dialog.setFilterNames(new String[] { "PNG(*.png)" });   
     dialog.setFilterExtensions(new String[] { "*.png", "*.*" });   
     String fileName = dialog.open();   
     // 根据指定文件和图片类型输出图片
     exportDiagramAsImage(fileName, SWT.IMAGE_PNG);
 }

 

 /**
  * 根据指定文件和图片类型输出图片
  * @param fileName
  * @param type
  */
 private void exportDiagramAsImage(String fileName, int type) {
  IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
  if(editor instanceof GraphicalEditPart){
   GraphicalViewer graphicalViewer =(GraphicalViewer)editor.getAdapter(GraphicalViewer.class);;
   if(graphicalViewer.getRootEditPart() instanceof ScalableFreeformRootEditPart){
    ScalableFreeformRootEditPart rootEditPart = (ScalableFreeformRootEditPart)graphicalViewer.getRootEditPart();
    IFigure figure = rootEditPart.getLayer(ScalableFreeformRootEditPart.PRINTABLE_LAYERS);
    byte[] data = createImage(figure, type);
    try {
     FileOutputStream fos = new FileOutputStream(fileName);
     fos.write(data);
     fos.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }

 

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

 

分享到:
评论

相关推荐

    gdb-peda-pwndbg-gef:自动为gdb安装Peda + pwndbg + GEF插件的脚本

    Pwndbg + GEF + Peda-一劳永逸,一劳永逸 这是一个在单个命令中安装Pwndbg,GEF和Peda GDB插件的脚本。 运行install.sh ,然后使用以下命令之一启动相应的GDB环境: gdb-peda gdb-peda-intel gdb-peda-arm gdb-...

    gef:Eclipse GEF:trade_mark:

    Eclipse图形编辑框架(GEF) Eclipse提供了Eclipse集成的最终用户工具,包括创作( )和词云渲染环境()以及框架组件( , , , , , , , 和 )来创建基于Eclipse集成或独立的丰富的基于JavaFX和SWT的图形化...

    GEF-ALL-3.2.2

    GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...

    gef:GEF-针对漏洞利用开发者和反向者的GDB增强功能

    GEF (发音为ʤɛf-“ Jeff”)是用于x86 / 64,ARM,MIPS,PowerPC和SPARC的一组命令,可在使用老式GDB时帮助漏洞利用开发人员和逆向工程师。 它使用Python API向GDB提供了其他功能,以在动态分析和漏洞利用开发...

    Eclipse插件开发:GEF入门系列宝典

    Eclipse插件开发:GEF入门系列宝典 GEF(Graphical Editor Framework)是一种流行的图形化编辑框架,主要应用于提供图形化编辑模型的功能,以提升用户体验。该框架广泛应用于图形化的流程设计器、UML 类图编辑器等...

    Eclipse插件开发:GEF入门系列宝典_gef_

    由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。

    xtext-gef:将 Xtext 集成到基于 GEF 的编辑器的示例项目

    Xtext 的 GEF 编辑器集成示例项目将 Xtext 集成到基于 GEF 的编辑器中,为的演示而。 org.xtext.example.statemachine :所述的statemachine的Xtext语言(一个例子的Xtext语言的变型)和运行时代码(解析器,串行化...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    9. **导出和导入**:讨论如何将图形数据序列化和反序列化,以便保存和加载编辑状态。 10. **调试与测试**:提供调试GEF应用程序的方法和技巧,以及如何进行单元测试和集成测试。 通过深入学习这些内容,开发者能够...

    自己下的GEF资源打包

    描述进一步说明了这个包中包含的具体内容,如“GEF_Tutorial”、“GEF实例”、“入门教程”以及“GEF-whole-upload”,这些都暗示了这是一个全面的学习资源,旨在帮助用户从基础到实践全方位掌握GEF。 GEF,全称为...

    gef 转折线的相关方法实现和 GEF的API chm 格式

    - `org.eclipse.gef.EditPart`:这是GEF的核心组件,它代表了图形模型中的一个元素,并负责将其映射到视图中。 - `org.eclipse.gef.GraphicalEditPart`:是EditPart的一个子类,专门处理图形元素的绘制和交互。 - `...

    GEF-runtime-3.5.0.zip

    在Eclipse环境中使用GEF:** Eclipse是一个强大的集成开发环境(IDE),支持多种语言和插件。在Eclipse中,你可以利用其插件开发框架PDE(Plugin Development Environment)来开发GEF编辑器。首先,你需要导入GEF库...

    将GEF应用到Web上,PPT

    标题“将GEF应用到Web上,PPT”表明这是一个关于如何在Web环境中使用GEF(图形编辑框架)技术的演示文稿。GEF,全称Graphical Editing Framework,是Eclipse基金会的一个开源项目,主要用于构建图形用户界面(GUI)...

    gef 资料 通俗易懂

    2. 安装与配置Gef: 在开始使用Gef之前,你需要在你的系统上安装GDB。然后,可以通过在GDB的初始化文件(通常是~/.gdbinit)中添加适当的命令行来安装Gef。安装过程简单明了,资料中会详细讲解每一步骤。 3. Gef...

    GEF入门学习例子

    GEF编辑器通常基于`AbstractGraphicalEditor`类,可以集成到Eclipse IDE中。 4. **指挥者(Commander)**: 指挥者处理用户操作,如工具栏点击或键盘输入,将这些操作转化为模型的更改。GEF的命令框架(Command ...

    GEF-SDK-3.7.0

    6. **事件处理与反向工程**:GEF可以捕获用户对图形的操作,并将这些操作转化为代码,反之亦然,支持模型到视图的同步。 **Eclipse** 是一个高度可扩展的开放源码IDE,最初为Java开发而设计,但现在支持多种语言和...

    GEF教程和demo源码

    3. **EditPart实现**:为了将模型数据映射到图形视图,你需要创建自定义的EditPart类。这里可能有一个代表“Hello”文本的EditPart。 4. **绘图和布局**:源码中会有绘制图形元素和设置布局的代码,比如在画布上...

    GEF-SDK-3.6.2 jar

    《GEF-SDK-3.6.2 jar:Eclipse GEF框架详解及在Android ADT中的应用》 GEF(Graphical Editing Framework)是Eclipse项目中的一个重要组成部分,它为开发图形化编辑器提供了强大的支持。在标题“GEF-SDK-3.6.2 jar...

    IBM GEF 推广资料

    通过这个深入的教程,参与者不仅可以学习到GEF的基本用法,还能了解如何在实际项目中规划和应用GEF,从而提升开发高效图形编辑工具的能力。无论是新手还是有一定经验的开发者,都能从中受益。如果你有关于GEF的计划...

Global site tag (gtag.js) - Google Analytics