将Graphics2D对象写入另一个Graphics2D对象

时间:2016-08-16 15:12:40

标签: java graphics2d

有没有办法将Graphics2D对象渲染到另一个Graphics2D对象中。 Not by turning one into an Image and drawing that,但作为图形基元?

作为一个例子,假设我想画5次相同的开头。所以我创建了一个Graphics2D对象,渲染它的星星。然后,我在我的主要Graphics2D对象中,在5个不同的位置渲染该星形Graphics2D对象。

通过保留所有线条绘制图元,然后当我从Graphics2D对象创建最终的SVG文件时,它可以放大1000倍并且它仍然是一个干净的渲染。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

Graphics2D是用于渲染命令的接收器永远不会充当源,因为您可以轻松地从缺少任何远程适合此目的的方法推断出来(即任何支持读取实际内容的方法图形)。

从设计的角度来看,这也是一种干净的方法,图形不仅可以渲染像素栅格,还可以渲染任何类型的图形设备。

虽然,由于Graphics只是一个抽象类,您可以创建允许您回读内容的实现,但不通过 Graphics2D API。它始终是通过不相关的API(例如BufferedImage)专门添加的功能。

如果你的目标是创建一个SVG,你可以使用基于矢量的原语;你可以使用java.awt.Shape的一大堆子类来定义几何。形状可以在Graphics2D中渲染,也可以使用getPathIterator()“遍历”Shape,并执行您需要的任何操作。

为了简单地渲染预定义几何体的倍数,Shapes是像素图像的等效矢量(如果您想知道,在渲染时需要使用translate / transform来重新定位Shape,没有接受形状坐标的调用。)

为了从基本形状中创建更复杂的形状,您可以使用API​​ java.awt.geom.Path2D,例如,它具有一个名为GeneralPath的具体实现,允许组合形状。

编辑:所以简单来说,Graphics2D不适合你的任务,Shape / GeneralPath就是。