我希望能够使用 Graphics2D 实例在 BufferedImage 上绘图,并在形状的外部 填充颜色。如果这是矩形之类的形状,那会很容易,但我需要使用的形状是圆形。
用颜色填充一个圆很容易,只需写下:
Graphics2D g2d = <my_image>.createGraphics();
...
g2d.fillOval(x, y, width, height);
然而,我想要的恰恰相反。我不想填充由数字 (x, y, width, height) 定义的椭圆形内部,而是想填充它之外的所有内容。
我在这方面收效甚微。唯一想到的就是在我希望圆圈占据的空间周围绘制巨大拱门,因为我很难弄清楚计算它的数学方法。
编辑:我不能只填满整个图像然后绘制圆圈的原因是因为圆圈中的不是单一颜色,而是我想拍摄图像(任何图像,如我自己的照片)并能够在该图像中间的圆圈周围添加单一颜色。因此,圆圈中间的任何东西在围绕它绘制之前就已经存在,而且它首先不是由代码绘制的东西。
最佳答案
这是一个基于 Java anti fillRect (fill everything outside of said rectangle) 的答案的示例.
它使用 substract来自 java.awt.geom.Area
的方法。
Area outter = new Area(new Rectangle(0, 0, img.getWidth(), img.getHeight()));
int x = (img.getWidth() / 4) ;
int y = (img.getHeight() / 4);
Ellipse2D.Double inner = new Ellipse2D.Double(x,y, img.getWidth()/2, img.getHeight()/2);
outter.subtract(new Area(inner));// remove the ellipse from the original area
g2d.setColor(Color.BLACK);
g2d.fill(outter);
没有裁剪(即没有 g2d.fill(outter)
部分):
带裁剪(外部填充黑色) :
关于java - 如何在形状(椭圆)之外填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614531/