是否有可能从线c#drawing 2d获得所有像素点

时间:2015-05-10 12:42:58

标签: c# drawing graphic

c# line graphic 我有一个带有绘图graphichpath的C#代码行,如何获得每行像素的所有值。不只是点(x1,y1)和(x2,y2)点,但我想要从(x1,y1)到(x2,y2)的所有像素

1 个答案:

答案 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