CS50的问题集4,模糊功能不起作用

时间:2020-07-22 20:43:49

标签: c cs50

最近4个小时以来,我一直坚持哈佛大学“计算机科学概论”第4个问题中的模糊功能,而我仍然不知道自己在做什么错。

  1. 我制作了原始图像的副本,然后一个个地遍历所有像素。
  2. 然后我要进行平均。所有周围的像素并将其复制到原始图像的副本中。
  3. 最后,我将重复图像的像素值复制到原始图像。
void blur(int height, int width, RGBTRIPLE image[height][width])
{
    RGBTRIPLE copy[height][width];
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            copy[i][j] = image[i][j];
        }
    }

    int sumRed=0,sumGreen=0,sumBlue=0;

    for(int i=0;i<height;i++)
    {
        for(int j=0;j<width;j++)
        {
            if(i==0 && j==0)
            {
                for(int k=i;k<=i+1;k++)
                {
                    for(int l=j;j<=j+1;j++)
                    {
                        sumRed+=image[k][l].rgbtRed;
                        sumGreen+=image[k][l].rgbtGreen;
                        sumBlue+=image[k][l].rgbtBlue;
                    }
                }
                copy[i][j].rgbtRed=sumRed/4;
                copy[i][j].rgbtGreen=sumGreen/4;
                copy[i][j].rgbtBlue=sumBlue/4;
                
            }
            else if(i>0 && j==0)
            {
                for(int k=i-1;k<=i+1;k++)
                {
                    for(int l=j;j<=j+1;j++)
                    {
                        sumRed+=image[k][l].rgbtRed;
                        sumGreen+=image[k][l].rgbtGreen;
                        sumBlue+=image[k][l].rgbtBlue;
                    }
                }
                copy[i][j].rgbtRed=sumRed/6;
                copy[i][j].rgbtGreen=sumGreen/6;
                copy[i][j].rgbtBlue=sumBlue/6;
            }
            else if(i==0 && j>0)
            {
                for(int k=i;k<=i+1;k++)
                {
                    for(int l=j-1;j<=j+1;j++)
                    {
                        sumRed+=image[k][l].rgbtRed;
                        sumGreen+=image[k][l].rgbtGreen;
                        sumBlue+=image[k][l].rgbtBlue;
                    }
                }
                copy[i][j].rgbtRed=sumRed/6;
                copy[i][j].rgbtGreen=sumGreen/6;
                copy[i][j].rgbtBlue=sumBlue/6;
            }
            else if(i>0 && j>0)
            {
                for(int k=i-1;k<=i+1;k++)
                {
                    for(int l=j-1;j<=j+1;j++)
                    {
                        sumRed+=image[k][l].rgbtRed;
                        sumGreen+=image[k][l].rgbtGreen;
                        sumBlue+=image[k][l].rgbtBlue;
                    }
                }
                copy[i][j].rgbtRed=sumRed/9;
                copy[i][j].rgbtGreen=sumGreen/9;
                copy[i][j].rgbtBlue=sumBlue/9;
            }
        }
    }
    for(int i=0;i<height;i++)
    {
        for(int j=0;j<width;j++)
        {
            image[i][j].rgbtRed=copy[i][j].rgbtRed;
            image[i][j].rgbtGreen=copy[i][j].rgbtGreen;
            image[i][j].rgbtBlue=copy[i][j].rgbtBlue;
        }
    }
    return;
}

0 个答案:

没有答案