Python 如何沿对角线翻转图片

Python 如何沿对角线翻转图片,python,jython,jes,Python,Jython,Jes,像这样 这就是我所拥有的,但它不起作用,我不知道为什么 def mirrorDiagonal(picture): for sourceX in range(0,getWidth(picture)): for sourceY in range (0,getHeight(picture)): pex=getPixel(picture,sourceY,sourceX) pix=getPixel(picture, sourceX,sourceY) col

像这样

这就是我所拥有的,但它不起作用,我不知道为什么

def mirrorDiagonal(picture):
  for sourceX in range(0,getWidth(picture)):
    for sourceY in range (0,getHeight(picture)):
      pex=getPixel(picture,sourceY,sourceX)
      pix=getPixel(picture, sourceX,sourceY)
      color=getColor(pix)
      setColor(pex,color)

假设你在(x,y)=(7,8)的蓝色位置,算法将(8,7)(绿色)像素变成蓝色。 当您的循环到达点(8,7)时,它会发现它是先前指定的蓝色,您不再具有原始颜色(绿色)。结果,右上角对角线保持不变,其反射位于左下角

为了恢复左下角的原始值,您需要将它们存储在某个位置,并在x>y时使用它们(图片的左下角部分)


[编辑]注意,根据图片的几何结构,变换(x,y)->(y,x)可能指向不存在的点。考虑50px x100px图片,当你在点(50100)时调用像素(100,50)来改变它的颜色,而它不存在于你的原始图片

< P>编辑这篇文章,因为我错了。< /P> 正如简所说,如果你想保留一半的图片,你必须考虑不要覆盖所有的像素

应该是这样的:

def mirrorDiagonal(picture):
    for sourceX in range(0,getWidth(picture)):
        for sourceY in range (sourceX,getHeight(picture)):
            pex=getPixel(picture,sourceY,sourceX)
            pix=getPixel(picture, sourceX,sourceY)
            color=getColor(pix)
            setColor(pex,color)

不过,您可能会想,您希望打开的对角线是什么。

“它不起作用”是非常模糊的。在我看来,从代码中可以看出,您正在用结果数据重写源缓冲区。输入和输出需要单独的缓冲区,或者交换像素(使用临时变量)。如果要进行就地交换,请确保不要将每一对进行两次交换。这里有一个参考:您不想获得并设置两种颜色而不是一种颜色吗?如果您不想保留图片的一半,这将是一个很好的优化。示例图片只是在对角线上镜像。啊,仍然无法使其工作。没希望了。哈。也许你可以更详细地描述一下为什么它不起作用。问题可能是宽度和高度不相等,或者其他任何东西。你必须提供更多的信息。