我有一个带有绘图graphichpath的C#代码行,如何获得每行像素的所有值。不只是点(x1,y1)和(x2,y2)点,但我想要从(x1,y1)到(x2,y2)的所有像素
答案 0 :(得分:1)
这是一个算法,可以估算两点之间的像素。请注意,它与屏幕上的内容完全不匹配(看起来是抗锯齿的)。
public static IEnumerable<Tuple<int,int>> EnumerateLineNoDiagonalSteps(int x0, int y0, int x1, int y1)
{
int dx = Math.Abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
int dy = -Math.Abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
int err = dx + dy, e2;
while(true)
{
yield return Tuple.Create(x0, y0);
if (x0 == x1 && y0 == y1) break;
e2 = 2 * err;
// EITHER horizontal OR vertical step (but not both!)
if (e2 > dy)
{
err += dy;
x0 += sx;
}
else if (e2 < dx)
{ // <--- this "else" makes the difference
err += dx;
y0 += sy;
}
}
}
用点替换元组。
有关详细信息,请参阅: http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm 要么 http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm