我目前正在使用WritableRaster和它的setPixed方法,我需要它不仅设置一个像素,而是设置半径为r的“圆”。 我在想的是这样的事情:
for(int y = -r; y < r; y++)
{
for(int x = -r; x < r; x++)
{
raster.setPixel(x,y,color);
}}
问题是,这是否可以制作一个圆圈,如果是这样,我将如何让它通过内部的所有像素?
提前致谢!
编辑:对不起,我没有说清楚 - 我在透明画布上制作橡胶工具,因此,如果我画一个透明色的圆圈,它将不会删除之前的那些......这就是为什么我正在使用setPixel。编辑编辑:这是代码的输出(在g2d上,使用具有相同值的drawLine,因此它只填充方法setPixel中的一个像素): http://i.imgur.com/a5QNMuX.png?1
编辑编辑编辑:如果有人想出于同样的原因使用此代码,我建议使用BufferedImage.setRGB(),因为它更快。如果您不知道如何处理颜色(最后一个参数),请使用以下内容:
...
buffImg.setRGB(x,y,new Color(r,g,b,a).getRGB());
...
答案 0 :(得分:1)
您必须单独填写每一行,但请注意,您必须调整半径x
的范围。这有点类似于进行2D(离散)集成。基本思路是x^2 + y^2 = r^2
位于外边界,y
和r
都是固定的,所以......:
for(int y = -r; y < r; y++)
{
int bound = (int)(sqrt(r * r - y * y) + 0.5);
for(int x = -bound; x < bound; x++)
{
raster.setPixel(x,y,color);
}
}
... + 0.5
是一种安全的方法来舍入到最接近的整数(而不是仅仅使用floor
进行投射),因为bound
将始终为正。