-3

我必须:

编写函数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)
4

1 回答 1

0

Python 中的循环(超过像素)非常慢 - 如果可能,您应该使用外部库,例如PIL(Python 成像库)和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
........      ........
于 2013-10-14T04:52:00.527 回答