我希望能够使用Graphics2D实例在BufferedImage上绘制并填充Shape的外部颜色。如果这是诸如Rectangle之类的形状,那会很容易,但是我需要使用的Shape是一个Circle。
仅需编写以下内容即可轻松用Color填充圆圈:
Graphics2D g2d = <my_image>.createGraphics();
...
g2d.fillOval(x, y, width, height);
但是,我想要的却与此相反。我不想填充受数字(x,y,width,height)限制的椭圆形内部,而是填充其外部的所有内容。
我在这方面几乎没有成功。我想到的唯一一件事就是在我想让圆占据的空间周围绘制 HUGE 拱形,因为我很难弄清楚数学来计算它。
编辑:之所以不能只填充整个图像然后在其上绘制圆圈,是因为圆圈中的颜色不是单一的颜色,而是我想拍摄一张图像(任何图像,例如我的照片),并能够在该图像中间的圆圈周围添加单色。因此,在画圆之前,已经在圆中间的任何地方都已经存在,而且它并不是一开始就由代码绘制的东西。
答案 0 :(得分:1)
这是一个基于Java anti fillRect (fill everything outside of said rectangle)的答案的示例。
它使用java.awt.geom.Area
中的substract方法。
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)
部分):
带修剪(外部充满黑色) :
答案 1 :(得分:0)
如果要使背景为纯色并留下椭圆形的白色怎么办?
JPanel.setBackgroundColor(Color.black);
然后绘制并填充椭圆形
g2d.setColor(Color.white);
g2d.drawOval(x, y, width, height);
g2d.fillOval(x, y, width, height);
这应该有助于对比它们
答案 2 :(得分:0)
数学是这样的
如果您知道圆在(x,y)处并且半径为r
cat = CatBoostClassifier(loss_function='Logloss',
verbose = False,
eval_metric='AUC',
iterations=500,
thread_count = None,
random_state=SEED)
print cat.get_params()
{'iterations': 500, 'random_state': 42, 'verbose': False, 'eval_metric': 'AUC', 'loss_function': 'Logloss'}
这会将BufferedImage b涂成红色在圆圈外。