Java 如何填充形状(椭圆形)外部的颜色

Java 如何填充形状(椭圆形)外部的颜色,java,graphics2d,shapes,fill,Java,Graphics2d,Shapes,Fill,我希望能够使用Graphics2D实例在BuffereImage上绘制,并在形状的外部填充颜色。如果这是一个像矩形这样的形状,那就很容易了,但是我需要处理的形状是一个圆 用颜色填充圆圈很容易,只需写下: Graphics2D g2d = <my_image>.createGraphics(); ... g2d.fillOval(x, y, width, height); Graphics2D g2d=.createGraphics(); ... g2d.圆角椭圆(x,y,宽度,高度

我希望能够使用Graphics2D实例在BuffereImage上绘制,并在形状的外部填充颜色。如果这是一个像矩形这样的形状,那就很容易了,但是我需要处理的形状是一个圆

用颜色填充圆圈很容易,只需写下:

Graphics2D g2d = <my_image>.createGraphics();
...
g2d.fillOval(x, y, width, height);
Graphics2D g2d=.createGraphics();
...
g2d.圆角椭圆(x,y,宽度,高度);
然而,我想要的恰恰相反。我不想填充被数字(x,y,宽度,高度)破坏的椭圆形的内部,我想填充它外部的所有东西

我在这方面几乎没有成功。我唯一想到的就是在我想让圆圈占据的空间周围画一个巨大的拱门,因为我很难计算出这个数字


<编辑>:为什么我不能填满整个图像然后画圆圈,是因为圆圈里的东西不是单一的颜色,而是我想拍摄一张图像(任何图像,像我自己的照片),并且能够在该图像的中间围绕一个圆添加一个单一的颜色。所以,在圆圈中间的任何东西都是在画它之前就已经存在了,它并不是最初由代码绘制的东西。

< P>如果你把背景变成一个纯色而你离开了椭圆白色的内部?

 JPanel.setBackgroundColor(Color.black);
然后画并填满你的椭圆

g2d.setColor(Color.white);
g2d.drawOval(x, y, width, height);
g2d.fillOval(x, y, width, height);

这将有助于将它们进行对比,例如

以下是一个基于

它使用
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.填充(outter)
零件):

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

数学是这样的:

如果知道圆在(x,y)处,半径为r

for(i=0; i<width; i++)
for(j=0; j<height; j++)
  if((i-x)*(i-x)+(j-y)*(j-y))>r*r)
    b.setRGB(i, j, 0xff0000);

对于(i=0;我如何使用新颜色绘制整个背景,然后绘制圆圈?这不起作用(请参见编辑)这看起来很完美,我喜欢使用我的个人资料图像XD的感觉