如何解决CS50滤镜RGBTRIPLE表示法
问题已更新:
在CS50的filter.c中,图像定义为RGBTRIPLE(*image)[width] = calloc(height,width * sizeof(RGBTRIPLE));
该表示法未在本讲座中涉及,并且令人困惑。我知道calloc会为图像中的所有像素分配内存,但是为什么要使用()以及为什么不将其仅定义为RGBTRIPLE image[height][width];
解决方法
image[height][width]
是一个固定变量,您不能为其分配内存。因此,您需要一个可以分配内存的指针。这就是“图像是指向'宽度'RGB三元组数组的指针。”
calloc
调用分配了这些东西的高度数组,因此您可以执行image[1]
获取下一行,并执行image[1][0]
获取第二行的第一像素。 / p>
您问是否可以使用image =calloc(..
做RGBTRIPLE *image;
,是的,您可以这样做。但是不,您不能image[1][0]
,因为编译器不知道行大小。我的意思是,您现在必须自己进行所有索引编制:image[1*width + 0]
是第二行的第一张像素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。