繁体   English   中英

为什么 Pixmap 圆圈减去 1?

[英]Why is a Pixmap circle off by 1?

我正在尝试使用 Pixmap 绘制一个圆圈。 为了使问题更清楚,我用白色填充整个像素图区域,然后用不同的颜色绘制圆圈。 这是我认为应该工作的代码。

我将像素图的宽度/高度设置为圆半径的两倍。

然后我在像素图的中间在(半径,半径)处画一个圆圈。

public static Texture circle(int radius, Color color) {
  Pixmap pixmap = new Pixmap(radius * 2, radius * 2, Pixmap.Format.RGBA4444);
  pixmap.setColor(Color.WHITE);
  pixmap.fill();
  pixmap.setColor(color);
  pixmap.fillCircle(radius, radius, radius);
  Texture texture = new Texture(pixmap);
  pixmap.dispose();
}

不幸的是,像素图切断了右侧和底部的圆圈。 例如:

在此处输入图片说明

如果我将像素图的大小在宽度和高度上都增加 1,那么它看起来很好:

在此处输入图片说明

我可以随意添加一个额外的像素,但我想了解为什么这是必要的。 为什么将圆的半径设置为 X 会导致直径实际上为 X + 1?

为了获得您想要的结果,圆心的位置必须位于两个像素之间,以便该位置两侧的完整像素数量相似。 我的猜测是 Pixmap 代码将像素的位置定义为表示像素的中心。 所以点(radius, radius)比左边更靠近右边缘,并且(radius-1, radius-1)比右边更靠近左边缘。 有了这个位置定义,圆的中心应该在位置(radius-.5, radius-.5)

如果您必须将圆的中心放在像素的中间,那么您可以使用圆的位置(radius, radius)并且您需要像素图的宽度和高度是(2*radius + 1, 2*radius+1) 这样, radius+.5两侧的像素数相同, radius+.5像素。 如果图书馆愿意,您可能在那时想要绘制一个半径radius + .5的圆。

因为它提请中心的像素的圆,而不是像素之间

所以绘制的圆的实际半径比传入的大一,半径为1的圆被绘制为(数字在这个例子中是坐标):

 012
0 X
1XCX
2 X

从技术上讲,它的半径为 1.5,但现在它以像素 (C) 为中心。 我猜这是为了让您准确放置它,就好像它的半径实际上为 2,您将无法将中心放置在像素上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM