正确的图像像素翻转/镜像?

时间:2010-04-15 17:04:10

标签: c++

http://tinypic.com/r/fwubzc/5

这显示了翻转应该是什么以及镜子应该是什么。

两种镜子的代码:

void mirrorLeftRight()
{
    for (int x = 0; x < width/2; x++) {
            for (int y = 0; y < height; y++) {
                int temp = pixelData[x][y];
                pixelData[x][y]=pixelData[width-x][y]
                pixelData[width-x][y]=temp;
            }
    }
}

void mirrorUpDown()
{
    for (int x = 0; x < width; x++) {
            for (int y = 0; y < height/2; y++) {
                int temp = pixelData[x][y];
                pixelData[x][y]=pixelData[x][height-y]
                pixelData[x][height-y]=temp;
            }
    }
}

这对镜子来说是否合适?

翻转时,只需使用widthheight w / o除以2?

3 个答案:

答案 0 :(得分:4)

您需要使用width-1-x代替width-xheight-1-y代替height-y。否则,对于x == 0,您将尝试索引[width],它位于数组之外。

答案 1 :(得分:2)

它不应该工作,因为您只需要使用左侧部分覆盖图像的右侧部分,而交换像素。同样的事情也适用于mirrorUpDown

如果你交换它们就会获得一个翻转,如果你覆盖它们就会获得一个镜子。

  • mirrorLeftRight:从左半部分取像素并使用它们覆盖右侧部分
  • mirrorUpDown:从上半部分获取像素并使用它们覆盖下部像素
  • 翻转:在这种情况下,你不会覆盖,但你交换了像素(在这种情况下,它的一半不会影响)

答案 2 :(得分:0)

上面的代码看起来更像是Flip的正确方法,而不是镜像。

镜像我猜你不会切换像素,而是从一侧复制到另一侧。

使用镜像我猜你需要改变

int temp = pixelData[x][y]; 
pixelData[x][y]=pixelData[width-x][y] 
pixelData[width-x][y]=temp;

仅限于此类

pixelData[x][y]=pixelData[width-x][y] 
相关问题