Python镜像顺时针方向

时间:2013-10-14 04:20:06

标签: python jython

我必须:

编写函数mirrorClockWise(source),以顺时针方向反映每个源的四分之一。左上角的左上角镜像到右上角的四分之一处。右上角部分镜像到右下角的四分之一处。

这是我的代码,唯一的问题是右上角与它应该是不同的,因为它镜像已经镜像的左上角,而不是原来的左上角。

让我知道无论如何我都可以解决这个问题......

def topLeft(source):
    mirrorPoint = getWidth(source) / 2
    width = getWidth(source)
    for y in range(0,getHeight(source)/2):
      for x in range(0,mirrorPoint):
        leftPixel = getPixel(source,x,y)
        rightPixel = getPixel(source,width - x - 1,y)
        color = getColor(leftPixel)
        setColor(rightPixel,color)

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

def bottomRight(source):
    mirrorPoint = getWidth(source) / 2
    width = getWidth(source)
    for y in range(getHeight(source)/2,getHeight(source)):
      for x in range(mirrorPoint,width):
        leftPixel = getPixel(source,x,y)
        rightPixel = getPixel(source,width - x - 1,y)
        color = getColor(leftPixel)
        setColor(rightPixel,color)

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

def mirrorClockWise(source):
    bottomLeft(source)
    bottomRight(source)
    topRight(source)
    topLeft(source)

1 个答案:

答案 0 :(得分:0)

Python中的循环(超过像素)非常慢 - 如果可能,您应该使用外部库,例如PIL(Python Imaging Library)和transpose方法。我不确定是否可以从Jython获得PIL。

关于镜像已镜像的数据,您可以:

1)将源图像和目标图像传递给函数是很常见的。创建新图像以存储结果,以便在处理

时源图像不会损坏
dest = source.copy() # using PIL copy method
topLeft(source, dest)
...

2)将图像分成4个部分,分别镜像并重新组合图像(好好利用外部库可能会使这个最快)

im1 = source.crop(box) # where box defines one of the corners
im1.load()
im1.transpose(FLIP_LEFT_RIGHT)
... do other corners
im.paste(im1, box)
... do other corners

3)重写算法,以便您可以修改数据。例如,不是分别处理每个角,而是考虑相互映射的像素集:

第一步

a......b      c......a
........  =>  ........
........      ........
c......d      d......b

第二步

.e....f.      .h....e.
........  =>  ........
........      ........
.h....g.      .g....f.

...

........      ........
i......j  =>  l......i
l......k      k......j
........      ........