0

我无法让我的程序垂直翻转 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];
    }



}
4

2 回答 2

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

于 2013-11-02T09:47:06.130 回答
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;
        }
    }
}
于 2013-11-02T04:37:33.383 回答