0

我的目标是读取 PGM 图像并生成具有反转颜色值的图像。但是当我输入这个图像时,我又得到了这个图像。我在 C 语言中编程,在 Windows 7(64 位)上使用 Eclipse 和 MinGW GCC。为什么图像会变得如此严重?

int complement(PGMImage *img) {
int i, j;

// set up new PGM to copy onto
PGMImage* comImg = (PGMImage*)malloc(sizeof(PGMImage));
(*comImg).width = (*img).width;
(*comImg).height = (*img).height;

// invert each pixel
for(i = 0; i <= (*img).width; i++) {
    for(j = 0; j <= (*img).height; j++) {

        // set inverted value for each new pixel
        (*comImg).data[i][j].red = abs((*img).maxVal - (*img).data[i][j].red);
        (*comImg).data[i][j].green = abs((*img).maxVal - (*img).data[i][j].green);
        (*comImg).data[i][j].blue = abs((*img).maxVal - (*img).data[i][j].blue);
    }
}

// save a copy of the complement image
save("C:\\image_complement.pgm", comImg);
printf("A copy of your image has been saved as \"C:\\image_complement.pgm\"\n\n");
void free(comImg);
return 0;
}
4

2 回答 2

1

我认为<=应该<在你的两个循环中。使用修改后的图像,从评论到另一个答案,看起来每一行都“越过了边缘”。


嗯,apgm是一个graymap,对吧?“红”“绿”“蓝”是什么意思?

于 2013-07-25T18:20:24.773 回答
1

我不确定,但我怀疑图像的外部数组索引是行,内部是列。因此,我希望i应该运行 to(*img).heightjto (*img).width

于 2013-07-25T17:55:52.613 回答