2

我正在做一个家庭作业项目来旋转一个简单的二维数组,该数组保存 PGM 文件的 RGB 值。

我已经在这些论坛中阅读了很多关于如何在 C 中执行此操作的帖子,并且我几乎已经可以使用它了。我的输出文件具有正确的尺寸并已旋转,但顶部和侧面有一个厚厚的黑色边框。我只是不知道我做错了什么。

任何帮助将不胜感激!

我修改了此处提供的代码以开始使用,这是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()

4

1 回答 1

0

memcpy(new_img, old_img, sizeof(PGMImage)malloc声明之后尝试如何。也许除了宽度和高度之外的其他一些属性没有初始化。而且,如果变量是指针,你是否为 new_img 对象分配data了一块内存?data

于 2013-07-20T11:03:48.513 回答