`
longgangbai
  • 浏览: 7330701 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

gef中将流程图转换图片复制粘贴原理以及实现

阅读更多

设计思路如下:将一个gef图元转换为一个图片(createImage()方法是实际在内存里作画并转换为可写入为文件的二进制流),然后将图片转换为ImageData对象,通过系统的ImageTransfer转换器转换:

A.将gef图元转换为图片:

/**

     * 将一个元件装换为一个图片的信息资源

    * Returns the bytes of an encoded image for the specified

    * IFigure in the specified format.

    *

    * @param figure the Figure to create an image for.

    * @param format one of SWT.IMAGE_BMP, SWT.IMAGE_BMP_RLE, SWT.IMAGE_GIF

    * SWT.IMAGE_ICO, SWT.IMAGE_JPEG, or SWT.IMAGE_PNG

    * @return the bytes of an encoded image for the specified Figure

    */

    privatebyte[] createImage(IFigure figure, int format) {

           IWorkbenchPart activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();

           Device device =activePage.getTitleImage().getDevice();

           Rectangle r = figure.getBounds();

           ByteArrayOutputStream result = new ByteArrayOutputStream();

           Image image = null;

           GC gc = null;

           Graphics g = null;

           try {

              image = new Image(device, 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();

   }

关于粘贴复制:

参考见文本复制倒粘贴板:

    publicvoid copyToClipboard() {

       if (text == null) {

           return;

       }

       Clipboard clipboard = null;

       try {

           clipboard = new Clipboard(text.getShell().getDisplay());

           String contents = text.getSelectionText();

           if (contents.length() == 0)

              contents = text.getText();

           clipboard.setContents(new Object[] { contents },

           new Transfer[] { TextTransfer.getInstance() });

       } finally {

           if (clipboard != null) {

              clipboard.dispose();

           }

       }

   }

获取粘贴板中的数据:

Object getClipboardContent(int clipboardType) {

    TextTransfer plainTextTransfer = TextTransfer.getInstance();

    returnclipboard.getContents(plainTextTransfer, clipboardType);

}

分享到:
评论

相关推荐

    GEF实现拷贝粘贴

    标题“GEF实现拷贝粘贴”涉及到的是在软件开发中使用Graphical Editing Framework(GEF)进行图形界面编辑时,如何实现复制和粘贴功能的技术。GEF是Eclipse平台下用于构建图形化编辑器的框架,它提供了一套完整的...

    一个GEF绘图的简单例子

    它提供了一套完整的架构和库,使得开发者能够快速、灵活地创建出复杂的图形用户界面,特别适合于开发流程图、网络拓扑图、UML模型等图形化应用程序。 **主要组件与概念** 1. **DirectEdit**: GEF中的DirectEdit...

    GEF原理的详细介绍+程序实例和程序源码

    通过学习GEF,开发者可以构建出强大的图形化工具,例如数据库设计工具、流程图编辑器、网络拓扑图等。PPT文件则可能包含更详尽的理论讲解和案例分析,帮助深入理解GEF的工作机制。程序源码则提供实践指导,让开发者...

    GEF典型实现例子

    标题“GEF典型实现例子”指的是使用Graphical Editing Framework (GEF)的示例应用。GEF是Eclipse平台下的一个开源项目,主要用于构建图形化编辑工具,它提供了丰富的图形用户界面(GUI)组件和框架,帮助开发者创建...

    RCP与GEF课件,介绍RCP和GEF各组成部分和工作原理

    GEF支持创建各种图形用户界面,包括绘图工具、流程图和模型编辑器。 GEF的主要组件包括: 1. **Model**:模型是数据结构,包含了图形元素的信息。它可以是简单的数据结构,也可以是复杂的领域模型。 2. **Edit ...

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

    在本篇文章中,我们将深入探讨gef转折线的相关方法实现以及GEF的API。 首先,让我们理解一下什么是转折线。在图形编辑中,转折线通常指的是具有多个折点的线条,这些折点可以由用户交互式地调整,以改变线条的形状...

    使用Draw2d做的流程图工具

    在实现流程图工具时,通常需要将流程图的结构和状态序列化,以便于保存和加载。这可能涉及到XML序列化或者JSON格式的转换。 9. **集成到应用程序**: Draw2d可以轻松地与其他Java GUI库(如Swing或SWT)集成,...

    eclipse gef原理的详细介绍PPT,很有参考价值

    **GEF(Graphical Editing Framework)深度解析** GEF,全称为Graphical Editing Framework,是Eclipse平台下用于构建图形编辑器的...通过深入理解GEF的原理和实践,开发者可以更高效地构建出功能丰富的图形编辑应用。

    GEF理解系列三

    在GEF(Graphical Editing Framework)中,理解其工作流程对于开发图形编辑工具至关重要。GEF主要用于构建基于SWT和JFace的图形用户界面,它提供了丰富的功能来处理图形元素的绘制、操作和交互。本篇文章将深入探讨...

    EMF_GEF_入门系列

    开发者可以通过实现GEF提供的接口和回调方法,轻松地定制自己的图形编辑器,用于创建流程图、网络拓扑图、UML模型等各种图形表示。 本入门系列将涵盖以下几个主要知识点: 1. **EMF基础**:首先会讲解EMF的核心...

    GEF Example Source Code

    GEF主要应用于领域包括模型驱动工程(MDE)、软件建模、流程图和系统设计等。 标题"GEF Example Source Code"表明这是一个关于GEF框架的示例源代码集合,它可能包含各种演示如何使用GEF构建图形编辑功能的代码实例...

    eclipse_gef_example.rar

    流程图通常用于表示程序或工作流的步骤,这部分例子将涵盖节点(任务或决策点)、连接线(表示步骤间的转移)以及各种操作,如添加、删除、移动节点,以及调整连接线。开发者可以通过这个示例学习到如何构建可执行的...

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

    本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF的基础概念和实现方法。 GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放...

    GEF教程及demo源码

    通过阅读和调试DEMO源码,可以理解GEF的各个组件如何协同工作,以及如何扩展和定制自己的图形编辑工具。 **5. 进阶应用** - **Zest图渲染**: 结合Zest库,可以创建更丰富的图表类型,如树图、网络图。 - **自定义...

    GEF_Tutorial.rar(GEF开发指南)

    GEF支持多种交互操作,如拖放、选择、复制、粘贴、撤销/重做等。这些功能可以通过实现特定的适配器和命令来添加到你的编辑器中。 **8. 示例项目** "emf&gef.pdf"和"GEF_Tutorial.pdf"这两份文档很可能包含了详细的...

    GEF入门学习例子

    这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    这两个组件常被用于创建复杂的图形用户界面,特别是那些需要图形编辑功能的应用,如流程图、网络拓扑图等。 GEF提供了模型-视图-控制器(MVC)架构,使得开发者能够轻松地创建和操作图形元素。它的核心功能包括图形...

    GEF中文教程+代码

    - **Step 1-3**:基础概念和环境设置,讲解如何创建第一个GEF编辑器,包括模型定义、EditPart实现以及与Eclipse IDE的集成。 - **Step 4-5**:深入探讨模型-视图映射,包括图形元素的布局和连接线的绘制。 - **Step ...

    自己下的GEF资源打包

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

    基于GEF框架的SVG制作工具设计与实现

    ### 基于GEF框架的SVG制作工具设计与实现 #### 摘要与引言 本文聚焦于探讨一种新型SVG(可缩放矢量图形)制作工具的设计与实现,该工具基于Eclipse平台的GEF(Graphic Editor Framework)框架。SVG作为一种基于XML...

Global site tag (gtag.js) - Google Analytics