您的位置:首页 > 其它

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

2012-05-14 22:00 169 查看
之前的博客介绍了将当前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能保存图片的原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: