我正在做一个家庭作业项目来旋转一个简单的2D数组,其中包含PGM文件的RGB值。
我在这些论坛上阅读了很多关于如何在C中执行此操作的帖子,而且我几乎已经开始工作了。我的输出文件具有正确的尺寸并旋转,但顶部和侧面周围有一个厚黑色边框。我只是无法弄清楚我做错了什么。
任何帮助将不胜感激!
我修改了显示的代码here以开始使用,这是我正在处理的rotate90
函数:
PGMImage* rotate90(PGMImage *old_img)
{
int x, y;
PGMImage *new_img = malloc(sizeof(PGMImage));
new_img->maxVal = old_img->maxVal;
new_img->width = old_img->height;
new_img->height = old_img->width;
for (x = 0; x < old_img->width; x++)
{
for (y = 0; y < old_img->height; y++)
{
new_img->data[old_img->height - 1 - y][x].r = old_img->data[x][y].r;
new_img->data[old_img->height - 1 - y][x].g = old_img->data[x][y].g;
new_img->data[old_img->height - 1 - y][x].b = old_img->data[x][y].b;
}
}
return new_img;
}
void main()
{
PGMImage* img = malloc(sizeof(PGMImage));
getPGMfile("columns.pgm", img);
save("columns_new.ppm", rotate90(img));
}
save()
和getPGMfile()
功能完全可以自行完成
只有当我将rotate90()
函数的结果传递给save()
时,我才能获得时髦的结果。
答案 0 :(得分:0)
如何在memcpy(new_img, old_img, sizeof(PGMImage)
声明后尝试malloc
。也许除了宽度和高度之外的其他一些属性都没有初始化。而且,如果data
变量是指针,你是否为new_img对象为data
malloc了一段内存?