绘制直线算法

博客介绍
硬件:野火stm32指南者、3.2寸电阻触摸屏
开发环境:MKD5
功能:使用stm32驱动LCD绘制直线
参考:野火stm32液晶
修改内容:修改野火stm32配套例程绘制直线ILI9341_DrawLine()函数

附上代码


/**
 * @brief  在 ILI9341 显示器上使用 Bresenham 算法画线段 
 * @param  usX1 :在特定扫描方向下线段的一个端点X坐标
 * @param  usY1 :在特定扫描方向下线段的一个端点Y坐标
 * @param  usX2 :在特定扫描方向下线段的另一个端点X坐标
 * @param  usY2 :在特定扫描方向下线段的另一个端点Y坐标
 * @note 可使用LCD_SetBackColor、LCD_SetTextColor、LCD_SetColors函数设置颜色
 * @retval 无
 */
void ILI9341_DrawLine ( uint16_t usX1, uint16_t usY1, uint16_t usX2, uint16_t usY2 )
{
 uint16_t us;  
 int16_t usX_Current=0, usY_Current=0; 				//当前坐标相对于起始坐标偏移量
 int32_t lError_X = 0, lError_Y = 0, lDelta_X, lDelta_Y, lDistance; 
 lDelta_X = usX2 - usX1;  					//计算X轴坐标增量 
 lDelta_Y = usY2 - usY1; 					//计算Y轴坐标增量 
 if ( lDelta_X < 0 ) 
  lDistance = - lDelta_X;					//先将X轴作为基增量准轴
 else								//获取X轴增量长度
  lDistance = lDelta_X;
 if ( lDelta_Y < 0 )						
  lDistance = lDistance > -lDelta_Y ? lDistance:-lDelta_Y;	//三目运算符 判断并赋值X和Y谁为 基准轴增量
 else
  lDistance = lDistance > lDelta_Y ? lDistance:lDelta_Y;
 for ( us = 0; us <= lDistance; us++ )				//画线输出 
 {  
  ILI9341_SetPointPixel ( usX1+usX_Current, usY1+usY_Current );	//调用绘制点函数 	起始坐标加相对偏移量(对于不同的硬件请更改对应画点的驱动程序)
  lError_X += lDelta_X ;					//累加X轴坐标增量
  lError_Y += lDelta_Y ; 					//累加Y轴坐标增量
  usX_Current = (int16_t)(lError_X / lDistance);		//计算出X轴偏移增量 以基准轴增量为除数
  usY_Current = (int16_t)(lError_Y / lDistance);  		//计算出X轴偏移增量 以基准轴增量为除数
 }
}

PS:本函数算法对于任何屏幕均实用,只需要更改相应的画点函数即可。
对于绘制直线有多种算法,可参考链接: 图形算法:直线算法.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值