这个“像素转换”是tcl / tk canvas中的一个错误吗?

时间:2011-09-09 06:25:40

标签: tcl tk

查看此脚本的结果:

 canvas .c -bg white
 grid .c
 set x1 20
 set x2 22
 set y2 105
 for {set f 0} {$f<50} {incr f} {
     set y1 [expr {$y2-0.05*$f}]
     .c create rectangle $x1 $y1 $x2 $y2 -fill black
     incr x1 2
     incr x2 2
 }

在Windows XP上,我看到图底部边缘左侧比右侧低一个像素。但它不应该发生,因为y2对于所有矩形都是相同的(105)。你觉得怎么样?

1 个答案:

答案 0 :(得分:1)

我认为这与传统知识的努力有关 绘制一个至少1个像素的矩形。

在我可以看到的代码中,y2是递增的 1,如果在舍入为短整数后等于y1,则为1。

记录您的创建语句可以看到,像素跳转 发生在f = 10和f = 11之间。这就是重点 y1和y2变得不相等,不会发生调整:

f=10 .c create rectangle 40 104.5 42 105 -fill black
   rounded:   y1=105 y2=105
   adjusted:  y1=105 y2=106
f=11 .c create rectangle 42 104.45 44 105 -fill black
   rounded:   y1=104 y2=105
   no adjustment

这解释了像素跳跃。

IMO你应该对此提出错误。