这是相当基本的,我可能遗漏了一些非常明显的东西,但这让我有点难过。基本上,假设我正在尝试将整个 PPM 图像变为红色(这实际上不是我正在做的事情,但为了排除故障,我们会这样做)。我有一个用于存储像素值的结构。
typedef struct pixel_type
{
unsigned char r;
unsigned char g;
unsigned char b;
} pixel_t;
我用来指向该结构的指针是“缓冲区”。
pixel_t *buffer;
我还分配了我需要的空间量(图像的宽度 * 图像的高度 * 像素值的数量 [3] )
buffer = malloc(WIDTH*HEIGHT*sizeof(pixel_t));
然后我有一个“for”循环,我用它来逐步遍历缓冲区指针并将每个像素值转换为红色。
int i;
for (i=0;i<(WIDTH*HEIGHT);i++){
buffer->r=255;
buffer->g=0;
buffer->b=0;
buffer++;} //this part appears to be the problem
这里的问题是输出只是一个黑色图像,顶部有几个垃圾像素。我还尝试取出“缓冲区++”,第一个像素似乎毫无问题地转换为红色。但是,当我把它放回去时,没有一个像素是红色的(甚至不是第一个像素)。
我不确定我错过了什么。我知道当你创建一个指针时,你可以通过在指针末尾加上一个“++”来单步执行指针的下一个地址(没有 * 取消引用)。然而,这似乎是个问题。有人可以告诉我我做错了什么吗?
再次感谢,
奥斯汀