我想知道是否有人知道根据Bresenham的线算法或任何类似的方法绘制具有特定厚度的线的任何算法。
第二个想法,我一直想知道每个setPixel(x,y)我只画一个圆圈,例如:
filledCircle(X,Y,厚度);对于每个x,y但这当然会很慢。我也尝试使用字典,但这会立即填补内存。如果它们具有相同的颜色,请检查我要绘制的像素,但是对于大刷子来说这也不够有效。
也许我可以根据角度以某种方式画半圈?
任何意见都会受到赞赏。
感谢。
重复: how do I create a line of arbitrary thickness using Bresenham?
答案 0 :(得分:3)
你实际上不能沿着这条线绘制圆圈。这种方法是patented。 :) 你仍然可以阅读专利的灵感。
答案 1 :(得分:2)
我不知道常用的是什么,但在我看来,你可以将Bresenham用于1像素宽的线,但是可以垂直或水平延伸一定数量的像素。例如,假设您的线与水平线大约相差30度,并且您希望它的宽度为四个像素。您计算出该线的垂直厚度应为五个像素。你运行Bresenham,但对于每个像素(x,y),你实际绘制(x,y),(x,y + 1),...(x,y + 4)。如果你希望线的两端是圆的,在每一端画一个圆圈。
对于矫枉过正,制作手写笔的像素图(圆形或对角笔尖或其他),然后绘制一组平行的Bresenham线,每个像素用于手写笔中的每个像素。
答案 2 :(得分:2)
Bresenhams有不同的变量来计算像素覆盖率,例如anti-grain geometry库中使用的那些;你是否想要一些高质量的东西 - 你没有说输出介质是什么,而且大多数系统比开关LCDS更能支持有厚度的笔。