blob: 738e6bb7264c5c1545e9af441905c936b5396703 [file] [log] [blame]
//-----------------------------------------------------------------------------
// ____ _
// | ___| | ___ _ _
// | ___| | / __)\ \/ /
// | | | |_| ___) | |
// |_| \___|\___)/_/\_\ Image Library
//
// 2006, Intel Corporation, licensed under Apache 2.0
//
// file : FlexDraw.h
// author : Scott Ettinger - scott.m.ettinger@intel.com
// description: Primitive drawing functions.
//
// date:
// modified :
//-----------------------------------------------------------------------------
#ifndef FLEXDRAW_H
#define FLEXDRAW_H
#if defined(HAVE_CONFIG_H)
# include "config.h"
#endif
// Bresenham Line Algorithm implementation
template<class T, int C>
void FlexLine(FlexImage<T,C> &Image, int x1, int y1, int x2, int y2, T *color) {
int x, y, dx, dy;
int incx, incy, balance;
if(x2 > Image.Width() || y2 > Image.Height())
return;
if (x2 >= x1)
{ dx = x2 - x1;
incx = 1;
}
else
{ dx = x1 - x2;
incx = -1;
}
if (y2 >= y1)
{ dy = y2 - y1;
incy = 1;
}
else
{ dy = y1 - y2;
incy = -1;
}
x = x1;
y = y1;
if (dx >= dy)
{ dy <<= 1;
balance = dy - dx;
dx <<= 1;
while (x != x2)
{ Image.SetPixel(x, y, color);
if (balance >= 0)
{ y += incy;
balance -= dx;
}
balance += dy;
x += incx;
} Image.SetPixel(x, y, color);
}
else
{ dx <<= 1;
balance = dx - dy;
dy <<= 1;
while (y != y2)
{ Image.SetPixel(x, y, color);
if (balance >= 0)
{ x += incx;
balance -= dy;
}
balance += dx;
y += incy;
} Image.SetPixel(x, y, color);
}
}
#endif