【问题标题】:How to flip a picture diagonally [duplicate]如何对角翻转图片[重复]
【发布时间】:2012-10-31 20:42:22
【问题描述】:

这样

http://imgur.com/a/rPyKb

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

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)

【问题讨论】:

  • “它不起作用”非常含糊。在我看来,您正在用结果数据重写源缓冲区。您需要一个单独的缓冲区用于输入和输出,或者交换像素(使用临时变量)。如果您要进行就地交换,请确保不要将每对交换两次。

标签: python jython jes


【解决方案1】:

因为我错了所以编辑了这篇文章。

正如 Jan 所说,如果要保留一半图片,则必须考虑不覆盖所有像素。

应该是这样的:

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)

不过,您可能想考虑一下要翻转的对角线。

【讨论】:

  • 您不想获取和设置两种颜色而不是一种颜色吗?
  • 好吧,如果你不想保留一半的图片,那将是一个很好的优化。示例图片只是在对角线上镜像。
  • 哎呀,还是不能让它工作。这是没有希望的。哈。
  • 也许您可以更详细地说明它为什么不起作用。问题可能是宽度和高度不相等,或者其他任何问题。您必须提供更多信息。
【解决方案2】:

假设您处于蓝色的位置 (x,y)=(7,8),算法会将 (8,7)(绿色)像素变为蓝色。 当您的循环到达点 (8,7) 时,它会从先前的分配中发现它是蓝色的,并且您不再拥有原始颜色(绿色)。结果,您最终会保持右上角的对角线不变,而它的反射在左下角。

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

[编辑] 请注意,根据图片的几何形状,变换 (x,y) -> (y,x) 可能指向不存在的点。考虑一张 50 像素 x 100 像素的图片,当您位于 (50,100) 点时,您正在调用像素 (100,50) 以更改其颜色,而原始图片中不存在该像素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 2019-11-26
    • 2017-12-07
    • 2022-01-16
    • 2020-07-26
    • 2016-02-01
    • 2015-11-20
    • 1970-01-01
    相关资源
    最近更新 更多