使用C中的数组替换图像的一部分

时间:2016-10-28 06:25:48

标签: c

对于作业,我已经获得了相当大的代码块,它读取PGM图像的文件名,然后在通过具有一些for循环的函数运行它之后,它会写入一个新文件。 PGM是灰度图像,在2D阵列中存储0~255的数字。我应该调整函数中的for循环和数组,以便以某种方式调整新文件。以下是我到目前为止写的一些内容。

enter image description here

    int i,j;

    for (i=0;i<numRows/2;i++)
    { for (j=numCols/2;j<numCols;j++)
            {
              imgtemp[i+numRows/2-1][j+numCols/2-1] = imgtemp[i][j];
            }
    }

    int i,j;

    for (i=0;i<numRows;i++)
    { for (j=0;j<i;j++)
            {
              imgtemp[i][j] = 0;
            }
    }

我在弄清楚如何水平和垂直翻转选择方面遇到了一些麻烦。

我以为会是这样的:

    int i,j;

    for (i=0;i<numRows;i++)
    { for (j=0;j<i;j++)
            {
              imgtemp[numCols-1-i][numRows-1-j] = imgtemp[i][j];
            }
    }

但它最终会翻转图像的错误部分。我不确定如何解决它。

1 个答案:

答案 0 :(得分:1)

您想要将对角点(img[i][(int)(numCols*i/(float)numRows))])的值复制到右侧。因此,您的j索引应从i*numCols/numRows位置开始。 (如果图像是方形的,那么只需j = i}中的for

int i,j;

for (i=0;i<numRows;i++)
{
    for (j=(int)((numCols*i/(float)numRows)); j<numCols; j++)
    {
        imgtemp[numRows-1-i][numCols-1-j] = imgtemp[i][j];
    }
}