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