(PSET4 过滤器“灰度”)check50 究竟说的是我的代码有什么问题?

时间:2021-06-22 02:41:24

标签: c cs50

我的任务是编写一个程序,将灰度过滤器应用于给定的图像。这是通过循环每个像素并平均 rgb 值来完成的。当我检查我的代码时,我收到一条错误消息,似乎在说“错误:预期 X,收到 X”。感谢您对错误消息的任何澄清或对可能的错误的评论。

我的代码循环遍历被描述为 RGBTRIPLES 的像素数组的每一行中的每个像素,结构由 3 个 uint8_t 组成。在非整数平均值的情况下,程序会将向上四舍五入到最接近的整数。我的答案是下面包含的代码。

当我运行 check50 cs50/problems/2021/x/filter/more 时,我的问题就出现了,这是一个根据课程设计者制作的密钥测试学生程序的程序。第 7 次测试检查程序过滤“复杂”3x3 图像的准确性;我得到以下结果:

:( grayscale correctly filters more complex 3x3 image
    expected "20 20 20\n50 5...", not "20 20 20\n50 5..."

我很困惑,因为我的输出似乎与预期相符。有人可以告诉我我的问题是什么吗?

我的代码:

void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
    //Loop over pixels
    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {

            //Average out rgbs to get a corresponding greyscale value
            BYTE average_activation = ceil(((float) image[y][x].rgbtBlue + image[y][x].rgbtRed + image[y][x].rgbtGreen) / 3);
            RGBTRIPLE resultant_pixel = {average_activation, average_activation, average_activation};

            //apply
            image[y][x] = resultant_pixel;
        }
    }

    return;
}

1 个答案:

答案 0 :(得分:0)

我认为您应该使用 round 而不是 ceil 使用 #include <math.h> 使事情变得过于复杂。此外,您不应为图像中的每个像素定义新像素。而是定义一个与旧图像具有相同宽度和高度的新图像,并替换该图像中的每个像素。最后用旧图像替换新图像。