我的目标是读入PGM图像并生成具有反转颜色值的图像。但是当我输入this image时,我会回来this image。我在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;
}
答案 0 :(得分:1)
我不确定,但我怀疑你的图像的外部数组索引是行,而内部是列。因此,我希望i
应该运行到(*img).height
和j
运行到(*img).width
。
答案 1 :(得分:1)
我认为<=
在两个循环中应该是<
。通过修改后的图像,从评论到另一个答案,它看起来就像是在每一行上“踩到边缘”。
嗯,pgm
是灰色地图,对吗? “红色”“绿色”和“蓝色”是什么意思?