Является ли этот "сдвиг пикселей" ошибкой в ​​tcl/tk canvas?

Посмотрите на результат этого скрипта:

 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 я вижу, что с левой стороны рисунка нижнее поле на один пиксель ниже, чем с правой стороны. Но это не должно происходить, поскольку у2 одинаково (105) для всех прямоугольников. Как вы думаете?

1 ответ

Я думаю, что это связано с усилием TK нарисовать прямоугольник размером не менее 1 пикселя.

В коде я вижу, что y2 увеличивается на 1, если оно равно y1 после округления до короткого целого числа.

Записывая ваши операторы создания можно увидеть, что скачок пикселей происходит между 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

Это объясняет скачок пикселей.

ИМО, вы должны сообщить об этом.

Другие вопросы по тегам