Я думаю, у вас есть две проблемы в вашем коде, обе из которых проистекают из того факта, что ваш код не DRY.
DRY означает «Не повторяйся». В вашем коде есть отдельный код для выбора следующего пикселя из исходного изображения и места рисования пикселя в целевом изображении. Поведение этих двух вещей должно быть идентичным, но поскольку он использует разные пути кода, становится вероятным, что ошибка где-то изменит это поведение.
Я не могу протестировать ваш код локально, но я думаю, это две ошибки:
- исходный пиксель считывается до координаты исходного пикселя обновляются, но целевой пиксель щелкается после целевого пикселя координаты обновляются
- исходный пиксель проверяется, если он находится за пределами конца строки после обновления его координаты x - целевой пиксель проверяется, если он находится за концом строки, только если он не обновляет координата x (в первом случае это
if
вместо elif
)
Вместо цикла для правильного количества пикселей, почему бы не l oop over x
и y
отдельно, и тогда вы можете потерять весь подверженный ошибкам код, в котором вы проверяете, какую координату нужно обновить.
R Помимо обновления двух наборов координат, почему бы не использовать один набор и простой способ преобразования в другой набор?
Что-то вроде:
def set_colour_from_source(x, y):
py.click(x=984, y=95)
for b in range(2):
c = 460 + (20 * b)
py.doubleClick(x=831, y=c)
f = str(pix[x, y][b])
py.write(f)
py.click(x=466, y=520)
def get_destination_coords(x, y):
return (5 + x, 144 + y)
for x in range(w):
for y in range(h):
set_colour_from_source(x, y)
dx, dy = get_destination_coords(x, y)
py.click(dx, dy)