/*
*****************************************************************************************************
*
* Description : 绘制一条普通直线
*
* Arguments : x0,y0 - 直线坐标点1
* x1,y1 - 直线坐标点2
* col - 直线颜色
*
* Returns : 1 - 未绘制完
* 0 - 绘制完成
*
* Note :
*
*****************************************************************************************************
*/
#define swap(typ,a,b) do{typ swp = a; a = b; b = swp;}while(0)
typedef uint8 LCD_COL; /* 颜色变量 */
typedef uint8 LCD_COO; /* 坐标变量 */
uint8 GUI_putLine(LCD_COO x0,LCD_COO y0,LCD_COO x1,LCD_COO y1,LCD_COL col)
{
sint8 dp;
uint8 db;
LCD_COO dx,dy;
if(x0 > x1){
swap(LCD_COO,x0,x1);
swap(LCD_COO,y0,y1);
}
if(y0 > y1){
dy = y0 - y1;
dp = -1;
}else{
dy = y1 - y0;
dp = 1;
}
db = 0;
dx = x1-x0;
do{
db += dy;
do{
if(db > dx){
y0 += dp;
db -= (dx+1);
}
if(1 == LCD_putPixel(x0,y0,col)){
return(1);
}
}while(db > dx);
}while(++x0 <= x1);
return(0);
}
提供一个纯粹整数处理的,以前测试过可行,后来不知有没有改过。
|