【发布时间】:2015-03-04 22:30:42
【问题描述】:
我有一张位图,我需要在上面画一个圆圈。现在我只画了圆周的像素。如何在不使用扩展的距离函数的情况下获得其他像素? 这是我的代码
public void FindMostIntenityPixelInCircle(int x0, int y0, int radius, List<Point> intensities)
{
Bitmap bitmap = ((Bitmap)(_smartLabForm.pictureBoxGreenImage.Image));
int x = radius;
int y = 0;
int radiusError = 1 - x;
while (x >= y)
{
intensities.Add(new Point(x + x0, y + y0));
intensities.Add(new Point(y + x0, x + y0));
intensities.Add(new Point(-x + x0, y + y0));
intensities.Add(new Point(-y + x0, x + y0));
intensities.Add(new Point(-x + x0, -y + y0));
intensities.Add(new Point(-y + x0, -x + y0));
intensities.Add(new Point(x + x0, -y + y0));
intensities.Add(new Point(y + x0, -x + y0));
if (radiusError < 0)
{
radiusError += 2 * y + 1;
}
else
{
x--;
radiusError += 2 * (y - x) + 1;
}
}
}
【问题讨论】:
-
函数名称中的 "Most" 表明您应该比较值(可能在色彩空间转换之后),而不是将它们全部添加到列表中。
-
是的,我有一个 MarchingSquare 路径,并且对于路径的每个点,我需要绘制一个以该点为中心和给定射线的圆。在那个圆圈内,我应该找到绿色强度最大的像素
-
..如果您只想找到里面的像素,我建议使用 FloodFill 函数。 Here 是非递归的。请注意,它必须在此过程中更改像素,因此要仅获取像素坐标而不更改它们,您可以使用虚拟 Btimap 来使用洪水填充..
-
..但如果它始终是一个圆圈,您可以简单地逐行扫描像素通过您的列表..
标签: c# visual-studio-2012 bitmap