注释
贡献者
@Harvie如何应用它? |
贡献者
如果只是为了展示,那我觉得多此一举,因为你需要看看会做什么。 |
合作者作者
我已经在我的提交中应用了它
它不影响铣削或精度
它不会影响您查看细节的能力(无论如何这在 bCNC 中是非常糟糕的)。目前 bCNC 的观点远非准确。它使用线等来近似圆弧…但是缺少抗锯齿是您无法准确看到线的原因之一。如果需要,请阅读有关该主题的内容。然而,我的眼睛被非抗锯齿线伤害了,所以我添加了这个,因为它很容易做到。 然而,在我们转向 OpenGL #591之前,这只是便宜的简单修复 |
合作者作者
如果有人正在寻找 Tkinter Canvas 抗锯齿,仅供参考: ANTIALIAS_CHEAP = True
class CNCCanvas(Canvas, object):
#Calculate arguments for antialiasing
def antialias_args(self, args, winc=0.5, cw=2):
nargs = {}
#set defaults
nargs['width'] = 1
nargs['fill'] = "#000"
#get original args
for arg in args:
nargs[arg] = args[arg]
if nargs['width'] == 0:
nargs['width'] = 1
#calculate width
nargs['width'] += winc
#calculate color
#cbg = self.winfo_rgb(CANVAS_COLOR)
cbg = self.winfo_rgb(self.cget("bg"))
cfg = list(self.winfo_rgb(nargs['fill']))
#print cbg, cfg
cfg[0] = (cfg[0] + cbg[0]*cw)/(cw+1)
cfg[1] = (cfg[1] + cbg[1]*cw)/(cw+1)
cfg[2] = (cfg[2] + cbg[2]*cw)/(cw+1)
nargs['fill'] = '#%02x%02x%02x' % (cfg[0]/256, cfg[1]/256, cfg[2]/256)
#nargs['fill'] = '#AAA'
#print cfg, nargs['fill']
return nargs
#Override alias method if antialiasing enabled:
if ANTIALIAS_CHEAP:
def create_line(self, *args, **kwargs):
nkwargs = self.antialias_args(kwargs)
super(CNCCanvas, self).create_line(*args, **nkwargs)
return super(CNCCanvas, self).create_line(*args, **kwargs)
|
我想出了在 tkinter canvas 中进行抗锯齿的小技巧(否则已知它本身无法进行抗锯齿):
5像素:

1像素:

它不是非常平滑的子像素抗锯齿,但我认为它在眼睛上更容易!
我们所要做的就是覆盖 tkinter Canvas 方法,如 create_line() 或 create_oval() 来执行此操作。
唯一的问题是我们必须以某种方式计算出正确的颜色。可以这样做: