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这个类的publicDiagramEditPart createDiagramEditPart(Diagram diagram,Shell shell,PreferencesHint preferencesHint方法)。

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

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值