我希望能够使用 Graphics2D 实例在 BufferedImage 上绘图,并在形状外部填充颜色。如果这是一个诸如矩形之类的形状,那就很容易了,但是我需要使用的形状是一个圆形。
用颜色填充圆圈很容易,只需编写:
Graphics2D g2d = <my_image>.createGraphics();
...
g2d.fillOval(x, y, width, height);
Run Code Online (Sandbox Code Playgroud)
然而,我想要的却与此相反。我不想填充由数字(x,y,宽度,高度)定义的椭圆形内部,而是填充其外部的所有内容。
我在这方面几乎没有取得什么成功。唯一想到的就是在我想要圆圈占据的空间周围画出巨大的拱门,因为我很难弄清楚计算它的数学方法。
编辑:我不能先填充整个图像然后再画圆圈的原因是因为圆圈中的不是单一颜色,而是我想拍摄一张图像(任何图像,例如我自己的照片) )并能够在该图像中间的圆圈周围添加单一颜色。因此,圆圈中间的任何内容在围绕它进行绘制之前就已经存在,并且它首先不是由代码绘制的东西。
我有一个关于方法同步和最终排序的问题。以下两项均被编译器接受,但是它们之间是否有实际区别?
public synchronized final void update() {
// Do stuff
}
public final synchronized void update() {
// Do stuff
}
Run Code Online (Sandbox Code Playgroud) 我有一个问题,为什么某个东西“一步一步”完成后为什么不能编译,而为什么“一步一步”完成却不能编译。我有三节课;
class Time {
int mTime;
int Time::getTimeAsUnix() const {return mTime;}
}
class Travel {
Time mTimestamp;
const Time& Travel::getTime() const { return mTimestamp; }
Time& Travel::getTime() { return mTimestamp; }
}
class Analysis : public Travel {
int Analysis::getUnixTime() const {
// Time& t = Travel::getTime();
// return t.getTimeAsUnix(); // This does NOT compile
return Travel::getTime().getTimeAsUnix(); // This compiles
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么在Analysis类中编译非注释方法,而注释方法却给我一个即时的“ C ++错误:尝试时将'const Time'绑定到类型'Time&'的引用时会丢弃限定符”吗?
两者执行时不是完全一样吗?
java ×2
c++ ×1
const ×1
fill ×1
final ×1
graphics2d ×1
qualifiers ×1
reference ×1
shapes ×1
synchronized ×1