DrawLine

From WikiPrizm
Jump to: navigation, search

Synopsis

Uses the Bresenham line algorithm to draw a line starting at (x1,y1) ending at (x2,y2) with a specified RGB 565 color.

Source code

void drawLine(int x1, int y1, int x2, int y2, unsigned short color) {
    signed char ix;
    signed char iy;
 
    // if x1 == x2 or y1 == y2, then it does not matter what we set here
    int delta_x = (x2 > x1?(ix = 1, x2 - x1):(ix = -1, x1 - x2)) << 1;
    int delta_y = (y2 > y1?(iy = 1, y2 - y1):(iy = -1, y1 - y2)) << 1;
 
   plot(x1, y1, color);  
    if (delta_x >= delta_y) {
        int error = delta_y - (delta_x >> 1);        // error may go below zero
        while (x1 != x2) {
            if (error >= 0) {
                if (error || (ix > 0)) {
                    y1 += iy;
                    error -= delta_x;
                }                           // else do nothing
         }                              // else do nothing
            x1 += ix;
            error += delta_y;
            plot(x1, y1, color);
        }
    } else {
        int error = delta_x - (delta_y >> 1);      // error may go below zero
        while (y1 != y2) {
            if (error >= 0) {
                if (error || (iy > 0)) {
                    x1 += ix;
                    error -= delta_y;
                }                           // else do nothing
            }                              // else do nothing
            y1 += iy;
            error += delta_x;  
            plot(x1, y1, color);
        }
    }
}

Inputs

x1 - X coordinate of the start of the line.
y1 - Y coordinate of the start of the line.
x2 - X coordinate of the end of the line.
y2 - Y coordinate of the end of the line.
color - The color of the line.

Notes

This function requires the plot function.

Comments

Function was originally written by Christopher "Kerm Martian" Mitchell.