用C旋转2D PGM图像阵列

时间:2013-07-20 10:26:47

标签: c arrays rotation pgm

我正在做一个家庭作业项目来旋转一个简单的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()时,我才能获得时髦的结果。

1 个答案:

答案 0 :(得分:0)

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