/*---------------------------------------------------------------------------
功能: 画圆 并以颜色填充
rad_ 是被填充的半径,<=rad
rad_ =0 全填充, =rad-1 不填充 =rad 不画
著名的bresenham画圆算法
---------------------------------------------------------------------------*/
void lcd_fill_circle(unsigned int row, unsigned int column, unsigned int rad, unsigned int color,
unsigned int rad_ )
{
signed long D;/* Decision Variable */
unsigned long CurX;/* Current X Value */
unsigned long CurY;/* Current Y Value */
unsigned int i = 0;
for (i = rad; i > rad_; i--)
{
//以下开始画一个圆
D =3 - (i << 1); //3 - (rad << 1);
CurX = 0;
CurY = i;//rad;
while (CurX <= CurY)
{
Lcd_SetCursor(row + CurX, column + CurY);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row + CurX, column - CurY);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row - CurX, column + CurY);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row - CurX, column - CurY);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row + CurY, column + CurX);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row + CurY, column - CurX);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row - CurY, column + CurX);
SdCmd(0x0202);
SdData(color);
Lcd_SetCursor(row - CurY, column - CurX);
SdCmd(0x0202);
SdData(color);
if (D < 0)
{
D += (CurX << 2) + 6;
}
else
{
D += ((CurX - CurY) << 2) + 10;
CurY--;
}
CurX++;
}
//
}
}
注:这是我用stm32时写的,看一下算法还是可以的,效果还不错。将就着看吧。