почему мое изображение неправильно отображается в Microsoft Paint? - PullRequest
0 голосов
/ 13 июля 2020

Я создал программу, цель которой - перерисовать изображения в Microsoft Paint, однако вместо того, чтобы воссоздать точное изображение, она помещает каждый пиксель в неправильное место. например, вот изображение, которое я бы попытался воссоздать , а вот изображение, которое он нарисует вот мой (python) код:

import pyautogui as py
from PIL import Image, ImageOps
import time
from playsound import playsound

im = Image.open('google.jpg')  # Can be many different formats.
pix = im.load()

a = 0
b = 0
c = 460
d = 0
e = 0
g = 0
x, y = 5, 144
pixx, pixy = 0, 0
w, h = im.size

py.moveTo(x=132, y=1080)
time.sleep(1)
py.click()
while a <= w * h:
    py.click(x=984, y=95)
    while b <= 2:
        py.doubleClick(x=831, y=c)
        f = str(pix[pixx, pixy][b])
        py.write(f)
        b += 1
        c += 20
    py.click(x=466, y=520)
    b = 0
    c = 460
    d += 1
    a += 1
    if pixx < w:
        pixx += 1
    if pixx == w:
        pixx = 0
        pixy += 1
    if e < w and g <= h:
        py.click(x, y)
        x += 1
        e += 1
        # pixx += 1
    elif e == w and g <= h:
        py.click(x, y)
        g += 1
        y += 1
        x = 5
        e = 0
        # pixx = 0
        # pixy += 1
    else:
        playsound('bruh.mp3')
        print('bruh')

playsound('bruh.mp3')

1 Ответ

0 голосов
/ 13 июля 2020

Я думаю, у вас есть две проблемы в вашем коде, обе из которых проистекают из того факта, что ваш код не 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...