下而实现的代码
/// <summary>
/// 没有剪切的版本
/// </summary>
private void GetLine(CPoint P0, CPoint P1,
ref Color[] buffer, int width, int height)
{
CPoint ptExtra = P1 - P0;
int dx = ptExtra.X, dy = ptExtra.Y;
int yStep = 1, xStep = 1;
if (dx < 0) { dx = -dx; xStep = -1; }
if (dy < 0) { dy = -dy; yStep = -1; }
int dx2 = dx << 1;
int dy2 = dy << 1;
//int yStart = P0.Y, yEnd = P1.Y,
// xStart = P0.X, xEnd = P1.X;
int xi = 0, yi = 0;
int x = P0.X, y = P0.Y;
//int ix = xStart, iy = yStart;
int index = 0;
if (dx >= dy)
{//0 <= 斜率的绝对值 < 1,以x为增量
int error = -dx;
//if (dy > 0) { yStep = 1; }
//else { yStep = -1; }
//yStep = dy > 0 ? 1 : -1;
for (xi = 0; xi <= dx; xi++)
{
index = x + y * width;
buffer[index] = this.Color;
error += dy2;
if (error >= 0)
{
y += yStep;
error -= dx2;
}
x += xStep;
}
}
else
{//斜率的绝对值 >= 1,以y为增量
int error = -dy;
for (yi = 0; yi <= dy; yi++)
{
index = x + y * width;
buffer[index] = this.Color;
error += dx2;
if (error >= 0)
{
x += xStep;
error -= dy2;
}
y += yStep;
}
}
}