2d阵列翻转垂直

时间:2013-11-02 04:16:31

标签: c++ arrays multidimensional-array

我无法让我的程序垂直翻转ppm图像。截至目前,我的功能只吐出输入方式的确切图像。我有这个函数执行翻转......或者它假设。然后我有一个函数,紧接着要求读取图像,然后翻转,然后再次写出。我知道功能还可以,因为我已经测试过了。关于该怎么做的任何想法?

void ppmFlipVertical(int image[MAXROWS][MAXCOLS], int numRows, int numCols)
{
int temp, N,L,c;
N=3*numRows;
L=3*numCols;
c=0;

    for(int r=0; r<(N/2); r++)
    {
        temp=image[r][c];
        image[r][c] = image[N-r][c]; 
        temp=image[N-r][c];
    }



}

2 个答案:

答案 0 :(得分:1)

以下可能会有所帮助:

//void ppmFlipVertical(int image[][], int maxRows, int MaxColumn)
void ppmFlipVertical(int (&image)[MAXROWS][MAXCOLS])
{
    for (int r = 0; r < (MAXROWS/2); r++)
    {
        for (int c = 0; c != MAXCOLUMNS; ++c)
        {
             std::swap(image[r][c], image[MAXROWS - 1 - r][c]);
        }
    }
}

您的原型具有误导性,因为参数int image[MAXROWS][MAXCOLS]等同于int image[][]

您可以使用std::swap交换两个值。

行的最后一个有效索引是MAXROWS -1

答案 1 :(得分:0)

试试这个,它会有条不紊地翻转所有元素。 唯一的问题是我不确定您的图像是如何存储的,因此这是用于翻转单个单元格/项目。 我确定您可以轻松地一次推断这个项目的鳍状肢。

void ppmFlipVertical(int image[MAXROWS][MAXCOLS], int numRows, int numCols)
{
    int tempTop, tempBottom, c;
    for( c = 0; c < numCols; c++ ) //Heh c++
    {
        int r, rMax;
        rMax = numRows / 2;
        for( r = 0; r < rMax; r ++ )
        {
            tempTop=image[r][c];
            tempBottom=image[numRows-r][c];

            image[r][c] = tempBottom; 
            image[numRows-r][c] = tempTop;
        }
    }
}