Является ли этот "сдвиг пикселей" ошибкой в 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
Это объясняет скачок пикселей.
ИМО, вы должны сообщить об этом.