2013-06-16 2 views
3

Мне нужно сделать функцию, которая будет копировать изображение, но зеркально. Я создал код для зеркалирования изображения, но он не работает, и я не знаю, почему, потому что я прослеживал код, и он должен отражать изображение. Вот код:Отразить по горизонтали изображение в Python (JES)

def invert(picture): 
width = getWidth(picture) 
height = getHeight(picture) 

for y in range(0, height): 
    for x in range(0, width): 
    sourcePixel = getPixel(picture, x, y) 
    targetPixel = getPixel(picture, width - x - 1, height - y - 1) 
    color = getColor(sourcePixel) 
    setColor(sourcePixel, getColor(targetPixel)) 
    setColor(targetPixel, color) 
show(picture) 
return picture 

def main(): 
    file = pickAFile() 
    picture = makePicture(file) 
    newPicture = invert(picture) 
    show(newPicture) 

Может кто-нибудь объяснить мне, что не так? Спасибо.

+0

'шоу (фото)' и 'возвращение picture' должны быть отступы – bozdoz

+0

Пожалуйста, обновите ваш блок кода для' mirror' ;-), что у вас есть в вашем локальном файле ... –

+0

@boazdoz, когда я делаю это, он дает мне ошибку, пытающуюся передать аргумент функции. – user2387191

ответ

1

Попробуйте это:

def flip_vert(picture): 
    width = getWidth(picture) 
    height = getHeight(picture) 

    for y in range(0, height/2): 
     for x in range(0, width): 
      sourcePixel = getPixel(picture, x, y) 
      targetPixel = getPixel(picture, x, height - y - 1) 
      color = getColor(sourcePixel) 
      setColor(sourcePixel, getColor(targetPixel)) 
      setColor(targetPixel, color) 

    return picture 


def flip_horiz(picture): 
    width = getWidth(picture) 
    height = getHeight(picture) 

    for y in range(0, height): 
     for x in range(0, width/2): 
      sourcePixel = getPixel(picture, x, y) 
      targetPixel = getPixel(picture, width - x - 1, y) 
      color = getColor(sourcePixel) 
      setColor(sourcePixel, getColor(targetPixel)) 
      setColor(targetPixel, color) 

    return picture 
+0

, это так странно, потому что я только что придумал этот код 10 минут назад ха-ха. Но он по-прежнему переворачивает изображение по вертикали, а не по горизонтали. Я пробовал возиться с ним, но он не создавал горизонтальный флип. – user2387191

+0

хорошо, я понял ответ, для x в диапазоне должен быть ширина/2, а targetPixel должен иметь ширину - x - 1, y спасибо вам за помощь, ребята! – user2387191

+0

Молодцы, приветствия! –

1

Проблема заключается в том, что вы зацикливание по всему изображению, а не только на половину ширины. Вы зеркалируете дважды свое изображение и получаете то же изображение, что и вывод, как и тот, который вы вводите.

если вы зеркально по Y осям код должен быть

for y in range(0, height): 
for x in range(0, int(width/2)): 
+0

поэтому мне нужно было бы изменить для x в диапазоне (0, ширина): до для x в диапазоне (0, ширина/2) : ? Если это так, когда я пытаюсь, он переворачивает изображение по горизонтали и по вертикали. Я хочу только перевернуть его горизонтально. – user2387191

+1

Если вы хотите перевернуть, если горизонтально, он должен пройти половину высоты. –

+0

Да, но даже если я это сделаю, он дает мне тот же результат, что и если бы я разделил ширину на 2. – user2387191

Смежные вопросы