有没有办法将Graphics2D对象渲染到另一个Graphics2D对象中。 Not by turning one into an Image and drawing that,但作为图形基元?
作为一个例子,假设我想画5次相同的开头。所以我创建了一个Graphics2D对象,渲染它的星星。然后,我在我的主要Graphics2D对象中,在5个不同的位置渲染该星形Graphics2D对象。
通过保留所有线条绘制图元,然后当我从Graphics2D对象创建最终的SVG文件时,它可以放大1000倍并且它仍然是一个干净的渲染。
有办法做到这一点吗?
答案 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就是。