0 0

GEF中的图形怎么保存图片?10

我刚刚开始学习GEF,现在想把GEF中的图形保存为图片。搜到的只有八进制的那篇。我参照写的。

 

	public void run() {
		FileDialog dialog = new FileDialog(workbenchWindow.getShell(), SWT.SAVE);
		dialog.setFilterNames(new String[] { "PNG(*.png)" });
		dialog.setFilterExtensions(new String[] { "*.png", "*.*" });
		String fileName = dialog.open();
		
		CodeDiaGraphicalEditor editor = (CodeDiaGraphicalEditor) getPage().getActiveEditor();//这个getPage()不对,不知道该怎么写~~
		ScalableFreeformRootEditPart rootPart = (ScalableFreeformRootEditPart) 
		getViewer().getRootEditPart();//这个getViewer()不对,不明白该怎么写~~
		IFigure figure = rootPart.getLayer(ScalableFreeformRootEditPart.PRINTABLE_LAYERS);
		byte[] data = createImage(figure, SWT.IMAGE_PNG);
		try {
			FileOutputStream fos = new FileOutputStream(fileName);
			fos.write(data);
			fos.close();
			MessageDialog.openInformation(editor.getSite().getShell(), "导出",
					"图形已经导出到 " + fileName);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

下面的是createImage(),我直接抄过来的。

	private byte[] createImage(IFigure figure, int format) {
		Rectangle r = figure.getBounds();
		ByteArrayOutputStream result = new ByteArrayOutputStream();
		Image image = null;
		GC gc = null;
		Graphics g = null;
		try {
			image = new Image(null, 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();
	}
 

问题就是第一段的那两句。哎,感觉GEF的资料好难找啊~

各位给解答一下~先谢过了

2010年4月22日 19:50
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics