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

GEF中保存图片

    博客分类:
  • GEF
阅读更多
最近我在用GEF的一个图形编辑框架,很惭愧,自己Java还半生不熟,就直接被拉来做项目。
闲话短说,在项目进行过程中,涉及到这样的功能:将自己的Editor中的内容保存成图片。
我在网上找了一些资料,但是说得不够具体,可能对于像我这种Java菜鸟,又刚开始接触GEF的不大容易理解,通过自己的摸索,终于把图片导出来了,以下是我的实现过程:
1.首先要写一个创建图片文件的方法createImage(),这个我也是从网上摘抄来的,感谢网友的无私支持:
/**
 * 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
 */
private byte[] createImage(IFigure figure, int format) {
    Device device = getEditPartViewer().getControl().getDisplay();
    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();
}

摘自http://tjlvan.iteye.com/blog/226627
2.然后是第二步,也是之前我在网上找资料时比较迷惑不解的地方,即这个方法在什么地方使用? 我是这样实现的:
在我们自己创建的Editor的那个类中来用它。不管是RCP还是在Eclipse IDE中GEF应该都有一个自己的Editor(比如我的是MyFrameDeployEditor),即程序运行时那个空白编辑区(也叫“画板”),我在这个类的doSave()中使用以上方法,在保存文件为xml或者序列化的同时将画板上的内容另保存成图片文件。具体代码如下:
public class MyFrameDeployEditor extends GraphicalEditorWithPalette {
...
public void doSave(IProgressMonitor monitor) {
		
		//...这里将GEF项目保存成XML文件或者序列化为二进制文件或者可以什么都不做	
		
		//以下为保存图片的代码,弹出一个对话框,定义好路径和名字后,调用以上创建图片文件的方法,即可保存成图片。
		FileDialog dialog = new FileDialog(getSite().getWorkbenchWindow().getShell(), SWT.SAVE);  
		dialog.setText("保存图片文件");
	    dialog.setFilterNames(new String[] { "PNG(*.png)" });   
	    dialog.setFilterExtensions(new String[] { "*.png", "*.*" });   
	    String fileName = dialog.open();  	      
	    ScalableRootEditPart rootPart = (ScalableRootEditPart)this.getGraphicalViewer().getRootEditPart();//这里你根据你自己的Editor设置的是什么RootEditPart类型就定义什么类型即可,我这里是ScalableRootEditPart
	    IFigure figure = rootPart.getLayer(ScalableRootEditPart.PRINTABLE_LAYERS);   
	    byte[] data = createImage(figure, SWT.IMAGE_PNG); //调用createImage()方法 
	    try {   
	        FileOutputStream fos = new FileOutputStream(fileName);   
	        fos.write(data);   
	        fos.close();   
	        MessageDialog.openInformation(this.getSite().getShell(), "导出",   
	                "图形已经导出到 " + fileName);   
	    } catch (IOException e) {   
	        e.printStackTrace();   
	    }   

	}
...
}
分享到:
评论

相关推荐

    GEF中文教程+代码

    在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...

    GEF 入门版中文教程 源码

    在GEF中,模型通常由EMF(Eclipse Modeling Framework)来定义和管理,可以将业务逻辑和视图分离。 2. **视图(View)**:视图是模型的可视化表示,它将模型数据呈现为用户界面。GEF提供了基础框架来实现这一转换,...

    自己下的GEF资源打包

    标题中的“GEF资源打包”指的是一个集合了关于GEF(Graph Edit Framework)的各种学习资料的压缩文件。这个资源包可能包含了对理解、学习和使用GEF非常有帮助的材料。描述进一步说明了这个包中包含的具体内容,如...

    GEF入门学习例子

    在GEF中,模型通常由`EObject`和`EObjectImpl`实现,可以使用EMF(Eclipse Modeling Framework)来生成。 2. **视图(View)**: 视图是模型的可视化表示,将模型数据呈现给用户。GEF中的视图由`GraphicalViewer`类...

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

    在gef中,转折线的实现涉及到PathFigure和Segment类的使用。PathFigure用于定义一个图形的轮廓,而Segment则代表了轮廓中的一段线段。通过添加和调整Segment实例,我们可以构建出具有转折点的线条。 实现gef转折线...

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

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的...对于希望在Java和Eclipse环境中提升图形界面开发技能的程序员来说,"GEF入门必读 GEF入门系列 GEF-whole-upload"是一个不可多得的学习资源。

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    5. 数据持久化:介绍如何利用EMF的持久化服务将模型数据保存和加载到文件中。 6. 插件开发:讲解如何在Eclipse插件系统中集成GEF和EMF,以及如何发布和部署你的图形化应用。 7. 实战案例:通过实际项目案例,演示GEF...

    GEF入门实例代码2《Eclipse插件开发》中实例

    此外,理解MVC(模型-视图-控制器)模式和MVC在GEF中的应用对于提升开发效率至关重要。 总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的...

    GEF简易教程-学习GEF的入门教程

    在RCP项目中,**Editor**是最常见的GEF承载对象,它继承自`EditorPart`,提供了图形修改后的自动保存机制,这是View不具备的功能。 为了构建GEF编辑器,需要创建以下三个核心组件: 1. **模型(Model)**:定义数据...

    GEF快速入门教程和EMF教程

    - **Draw2D**: 版本3.1.0或以上,通常包含在GEF中 - **EMF**: 版本2.1.0或以上 ### 创建RCP项目 1. **初始化项目**: - 打开Eclipse并选择“File” > “New” > “Other” > “Plug-in Project”。 - 为项目命名`...

    GEF中文帮助实例

    在GEF中,模型是数据结构的抽象,用于存储和管理图形化编辑器所显示的信息。开发者需要定义自己的模型类,这些类通常继承自GEF提供的基础类,如`org.eclipse.gef.mvc.models.Model`。模型类中的属性和方法反映了图形...

    GEF中属性页面的实现

    本文将深入探讨如何在GEF中实现属性视图,并通过一个处理器(Processor)模型的例子来阐述具体步骤。 1. **属性视图的概述** - 属性视图用于展示图形模型的相关属性,如处理器的温度、IP地址和类型等。 - 当图形...

    GEF典型实现例子

    这两篇文章可能分别由CSDN博主和博客园博主分享了他们在使用GEF和相关技术,如Draw2D(用于在GEF中绘制2D图形的库)时的经验和技巧。 在深入理解GEF时,我们需要关注以下几个核心概念: 1. **模型-视图-控制器(MVC...

    Eclipse的GEF学习

    在GEF中,模型需具备变化通知机制,以便于及时更新控制器和视图。通常,模型的设计应紧密贴合业务逻辑,以确保数据的准确性和完整性。 2. **控制器(Control)**:控制器,即EditPart,是GEF的核心部件,负责处理模型...

    GEF框架入门学习

    这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...

    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...

    GEF Example Source Code

    描述中的"GEF Example Source Code"进一步强调了这是一个专注于GEF实际应用的代码资源,可能是为了教学目的或帮助开发者快速上手。通过查看和分析这些示例代码,开发者可以学习到如何处理图形绘制、交互操作、模型...

    GEF实例教程PDF

    - **Draw2D**:包含在GEF中,版本3.1.0及以上 - **EMF (Eclipse Modeling Framework)**:2.1.0 及以上版本 #### 二、创建RCP项目 - **RCP (Rich Client Platform)**:基于Eclipse的富客户端平台,提供了一种构建...

Global site tag (gtag.js) - Google Analytics