网上给的算法只能画0-90°的线条(而且还不能水平和垂直线条),我写的这个可以画0-360°。。。调bug调了好久,现在分享给大家,但是没有做线条越界图片边缘的截断(我累了),所以不要让线条超越图片大小,或者你改一下
def BresenhamLine(img,x1, y1, x2, y2, color):
y_neg = False
dx = x2 - x1
if (dx < 0):#向左走,就将起点终点调换
temp = x2
x2 = x1
x1 = temp
temp = y2
y2 = y1
y1 = temp
dx = x2 - x1 # 重新计算dx
dy = y2 - y1
if (dy < 0): # 向下走,就将计算出来的y加个负号
y_neg=True
dy=-dy
x = x1
y = y1#从起点开始
if(dx==0):#打竖画线,向左走换了(x1,y1),(x2,y2),向下走没有换,注意
y=min(y1,y2)
y_end=max(y1,y2)
while(y<=y_end):
img[x, y, color] = 200
y+=1
return img
elif(dy==0):#打横画线
while (x <= x2):
img[x, y, color]