高级会员

- 积分
- 616
- 金钱
- 616
- 注册时间
- 2015-6-29
- 在线时间
- 101 小时
|

楼主 |
发表于 2016-1-7 09:21:19
|
显示全部楼层
这个我知道,但是我从网上找了这个算法,然后试了,发现它画的过程中是会有重复画的现象,我的代码是这样的
[mw_shl_code=csharp,true]private void DrawCircle(int Xpos, int Ypos, int Radius, Bitmap bitMap)
{
int D; /* Decision Variable */
int CurX;/* Current X Value */
int CurY;/* Current Y Value */
//int i;
D = 3 - (Radius << 1);
CurX = 0;
CurY = Radius;
while (CurX <= CurY)
{
#if false
for (i = Xpos - CurX + 1; i < Xpos + CurX - 1; i++)
{
bitMap.SetPixel(i, Ypos + CurY - 1, Color.Red);
bitMap.SetPixel(i, Ypos - CurY + 1, Color.Red);
}
for (i = Xpos - CurY + 1; i < Xpos + CurY - 1; i++)
{
bitMap.SetPixel(i, Ypos + CurX - 1, Color.Red);
bitMap.SetPixel(i, Ypos - CurX + 1, Color.Red);
}
#else
//设置有效区域边框
bitMap.SetPixel(Xpos + CurX - 1, Ypos + CurY - 1, Color.Red);
bitMap.SetPixel(Xpos + CurX - 1, Ypos - CurY + 1, Color.Red);
bitMap.SetPixel(Xpos - CurX + 1, Ypos + CurY - 1, Color.Red);
bitMap.SetPixel(Xpos - CurX + 1, Ypos - CurY + 1, Color.Red);
bitMap.SetPixel(Xpos + CurY - 1, Ypos + CurX - 1, Color.Red);
bitMap.SetPixel(Xpos + CurY - 1, Ypos - CurX + 1, Color.Red);
bitMap.SetPixel(Xpos - CurY + 1, Ypos + CurX - 1, Color.Red);
bitMap.SetPixel(Xpos - CurY + 1, Ypos - CurX + 1, Color.Red);
#endif
if (D < 0)
{
D += (CurX << 2) + 6;
}
else
{
D += ((CurX - CurY) << 2) + 10;
CurY--;
}
CurX++;
}
}[/mw_shl_code]
|
|