GMF中,如何不打开editor保存图片

        之前的博客介绍了将当前editor保存为图片的方法。但由于项目里的需求有变,需要在不打开editor的情况下,通过图文件保存图片。由于保存图片的操作必须获得diagram的editpart才能保存,而目前已知的获取editpart的方法只有先打开editor才能获得。那还有其他办法吗?

           答案是有的。GMF保存图片对应CopyToImageUtil这个类,这个类里有个方法:copyToImage(Diagram diagram, IPath destination, ImageFileFormat format,IProgressMonitor monitor, PreferencesHint preferencesHint) ,我们可以给这个方法传入Diagram。之后便能通过Diagram保存图片了。

           不打开editor保存图片的具体实现如下:

                ResourceSet resourceSet  = new ResourceSetImpl(); 

                TransactionalEditingDomain.Factory.INSTANCE
                      .createEditingDomain(resourceSet); // 创建编辑域

                URI uri= URI.createFileURI(pathString); // 通过源文件路径创建一个URI

                Resource resource = resourceSet.getResource(uri, true); // 通过URI获得对应的资源(内存模型)

                Diagram diagram = null;

                // 通过resource获取Diagram

                for (Object resElt : resource.getContents()) {
                      if (resElt instanceof Diagram) {
                           diagram = (Diagram) resElt;
                           break;
                      }
                }

               CopyToImageUtil copyToImageUtil = new CopyToImageUtil();

               IPath ipath = new Path("D:\\1.jpg");  // 目标路径

               ImageFileFormat imageFormat = ImageFileFormat.resolveImageFormat(3); // 我这里选择的图片格式为jpg
        
               if (diagram != null) {

                        // 通过diagram保存图片
                       copyToImageUtil.copyToImage(diagram, ipath,
                       imageFormat, new NullProgressMonitor(),
                       XXXDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
               }

 

            分析:其实我们在给copyToImage()方法传入diagram的时候,这个方法会先搜索是否存在对应的editor,若存在,则通过这个editor获得diagram的editpart;若不存在,则会根据传入的Diagram,创建对应的editpart(OffscreenEditPartFactory这个类的public DiagramEditPart createDiagramEditPart(Diagram diagram,Shell shell, PreferencesHint preferencesHint方法)。

           本质还是通过设法获得EditPart来保存图片。这就是为什么通过传入Diagram能保存图片的原因。

posted @ 2012-05-14 22:00  supermmao  阅读(574)  评论(0编辑  收藏  举报