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

Write a Graphics2D object into another Graphics2D object

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

举个例子,假设我想绘制相同的起点 5 次。所以我创建了一个 Graphics2D 对象,将星星渲染到它上面。然后,我在我的主 Graphics2D 对象中,在 5 个不同的位置渲染 5 次星形 Graphics2D 对象。

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

有办法吗?

Graphics2D 是用于渲染命令的 sink。它 never 作为一个来源,因为你可以很容易地推断出没有任何方法可以远程满足这个目的(即任何支持 reading[=28= 的方法) ]图形的实际内容)。

从设计的角度来看,这也是一种干净的方法,Graphics 旨在允许渲染到不仅像素光栅,而且任何类型的图形设备。

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

如果您的目标是创建 SVG,可以使用基于矢量的原语;您可以使用 java.awt.Shape 的一大堆子 class 来定义几何。形状可以在 Graphics2D 中呈现,或者您可以 "traverse" 使用 getPathIterator() 的形状并执行您需要的任何操作。

为了渲染预定义几何体的简单目的,Shapes 是像素图像的矢量等价物(如果您想知道,您将需要使用 translate/transform 重新定位渲染时的形状,没有为形状取坐标的调用。

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

编辑:简单来说,Graphics2D 不是适合您任务的工具,Shape/GeneralPath 是。