You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50第4周作业:反射滤镜实现遇阻,求代码排查

CS50 反射滤镜问题修正

你的代码存在两个关键问题,导致无法正确实现图像翻转:

  • 内层循环范围错误
    当w遍历整个width时,每个对称位置的像素会被交换两次——前半段完成交换后,后半段又把它们换了回去,最终图像和原图完全一致。正确的做法是只遍历每行的前半部分,即w < width / 2,确保每个对称像素对只交换一次。

  • 索引计算错误
    width - w会超出数组的有效索引范围(数组最大索引为width-1),比如w=0时,width - w = width,这是无效的数组下标。应该用width - 1 - w来定位当前像素的对称位置。

修正后的代码如下:

void reflect(int height, int width, RGBTRIPLE image[height][width])
{
    for (int h = 0; h < height; h++)
    {
        RGBTRIPLE buffer;
        // 仅遍历每行前半部分的像素
        for (int w = 0; w < width / 2; w++)
        {
            buffer = image[h][w];
            // 获取当前像素的对称位置索引
            image[h][w] = image[h][width - 1 - w];
            image[h][width - 1 - w] = buffer;
        }
    }
    return;
}

举个简单示例:假设一行有4个像素(索引0、1、2、3),循环执行时:

  • w=0,交换索引0和3的像素
  • w=1,交换索引1和2的像素
    循环结束后,整行像素完成正确翻转,不会出现重复交换的问题。

内容的提问来源于stack exchange,提问作者miromar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:07:09