java - 如何在形状(椭圆)之外填充颜色

标签 java graphics2d shapes fill

我希望能够使用 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) 部分):

enter image description here

带裁剪(外部填充黑色) :

enter image description here

关于java - 如何在形状(椭圆)之外填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614531/

相关文章:

java - Linux 环境中 SOAP 二进制数据的 DataHandler

java - 无法为类实现测试程序

java - Scala:for循环:迭代目录流

java - Graphics2D 如何处理子像素精度?

java - 图像在 swing 中的 MouseEvent 上无法正确显示

python - 切掉一个角的矩形的非精确形状检测

javascript - D3 弧形端部人字形

java - 如何随机播放和播放阵列中的音频文件

Java Swing : Issue painting a grid

vba:测试形状是否包含文本框