这个功能不起作用,我不知道为什么。它编译得很好,程序似乎可以运行,但是经过仔细检查和调试,我发现:
newImg->x = b;
newImg->y = a;
实际上没有工作,它会导致问题。我尝试使用 newImg=img 进行复制,但这不允许我稍后更改 newImg 的值。它们保持完全相同。我也尝试修改img的值,然后做newImg,但调试显示newImg正在获取极值。
这是结构:
typedef struct
{
unsigned char grayscale;
} PGMPixel;
typedef struct
{
int x, y;
PGMPixel *data;
} PGMImage;
这是功能:
static PGMImage *rotatePGM(PGMImage *img)
{
PGMImage *newImg;
// Memory allocation for pgm
newImg = (PGMImage *)malloc(sizeof(PGMImage));
if (!newImg)
{
fprintf(stderr, "Unable to allocate memory\n");
exit(1);
}
//memory allocation for pixel data
newImg->data = (PGMPixel*)malloc(newImg->x * newImg->y * sizeof(PGMPixel));
if (!newImg)
{
fprintf(stderr, "Unable to allocate memory\n");
exit(1);
}
int a = img->x;
int b = img->y;
newImg->x = b;
newImg->y = a;
int u = a - 1;
int v = b - 1;
int i = 0;
int j = 0;
if(newImg)
{
for (i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
{
img->data[(j*a)+(u-i)].grayscale = img->data[(i*b)+j].grayscale;
}
}
}
return newImg;
}
如果有帮助,我正在使用 MinGW GCC 和 Windows 8。