【发布时间】:2013-02-04 19:37:50
【问题描述】:
语言:Java。
您好,我需要防止在 Graphics2D 的同一位置上多次绘制。例如,如果用户在某个区域上使用带圆帽且宽度为 10 的 BasicStroke 进行绘制,则无法再次绘制该区域。
我想这样做的原因是,用户可以在图像上绘制(徒手)半透明颜色,而无需在同一笔划上绘制(从而增加颜色的密度并降低其半透明度)。
我尝试存储用户所做的所有笔划的形状(作为减去形状的 Area 对象),然后通过所有这些 Area 对象的交集来裁剪 Graphics2D。
这几乎可行,但剪辑获得的“形状”与笔划绘制的“形状”并不完全相同 - 相差几个像素。
有没有人有其他可行的想法?
【问题讨论】:
-
这个问题很适合sscce 分析。请考虑创建其中之一并将其发布在此处。
-
而不是直接绘制到
Graphics2D上下文,创建一个透明的BufferedImage,绘制笔触,然后使用所需的 alpha 将其绘制回主图形上下文 -
一种方法是 1) 将原始(未更改的)图像保存在缓存中。 2)将副本添加到标签以进行显示(如果需要,使用鼠标侦听器进行绘图) 3)从用户(
Shape)获取他们正在绘制的输入。 4) 将其添加到“元形状” 5) 绘制第一张图像,然后将元形状绘制到第二张图像。
标签: java graphics awt shape clip