Jython/Python - перелистывание изображения по горизонтали

Я пытаюсь "разрезать" картинку пополам и перевернуть обе стороны по горизонтали. Смотрите ссылку ниже.

http://imgur.com/a/FAksh

Исходное изображение:

Какой результат должен быть:

Что я получаю

Это то, что у меня есть, но все, что он делает, это переворачивает картинку по горизонтали

def mirrorHorizontal(picture):
  mirrorPoint = getHeight(picture)/2
  height = getHeight(picture)
  for x in range(0, getWidth(picture)):
    for y in range(0, mirrorPoint):
      topPixel = getPixel(picture, x, y)
      bottomPixel = getPixel(picture, x, height - y - 1)
      color = getColor(topPixel)
      setColor(bottomPixel, color)

Так как мне перевернуть каждую сторону по горизонтали, чтобы она выглядела как вторая картинка?

2 ответа

Один из подходов заключается в определении функции для переворачивания части изображения по горизонтали:

def mirrorRowsHorizontal(picture, y_start, y_end):
    ''' Flip the rows from y_start to y_end in place. '''
    # WRITE ME!

def mirrorHorizontal(picture):
    h = getHeight(picture)
    mirrorRowsHorizontal(picture, 0, h/2)
    mirrorRowsHorizontal(picture, h/2, h)

Надеюсь, это даст вам начало.

Подсказка: вам может понадобиться поменять местами два пикселя; чтобы сделать это, вы захотите использовать временную переменную.

Год спустя, я думаю, мы можем дать ответ:

def mirrorRowsHorizontal(picture, y_start, y_end):
    width = getWidth(picture)

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

def mirrorHorizontal(picture):
    h = getHeight(picture)
    mirrorRowsHorizontal(picture, 0, h/2)
    mirrorRowsHorizontal(picture, h/2, h)

Взято из вертикального флип здесь.

Пример с 3 полосами:

mirrorRowsHorizontal(picture, 0, h/3)
mirrorRowsHorizontal(picture, h/3, 2*h/3)
mirrorRowsHorizontal(picture, 2*h/3, h)

До:

введите описание изображения здесь

После:

введите описание изображения здесь

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