几天来,我一直在试图弄清楚为什么我的程序只是重新打印输入图像。我知道我的其他功能可以工作,但由于某种原因,这个功能让我感到困惑,我已经尝试了所有我能想到的移动像素的方法,但我尝试过的绝对没有任何效果。
标题:
#include <stdio.h>
#include <stdlib.h>
struct pixel {
char r, g, b;
};
int g_width, g_height;
void parseHeader( FILE *input );
void parseImage( FILE *input, struct pixel *theArray );
void print(struct pixel a[]);
void my_Mirror(struct pixel a[]);
void rotate(struct pixel a[]);
void my_Flip(struct pixel a[]);
主要的:
#include "transform.h"
int main (int argc, char *argv[]) {
// declarations here
FILE *inFile;
// open input file
inFile = fopen(argv[2],"r");
if (inFile == NULL)
{
fprintf(stderr, "File open error. Exiting program\n");
exit(1);
}
// parseHeader function call here
parseHeader(inFile);
// malloc space for the array (example given in assignment write-up)
struct pixel * image =
(struct pixel *) malloc(sizeof(struct pixel) * g_width * g_height);
// parseImage function call here
parseImage(inFile, image);
// close input file
fclose(inFile);
// manipulate the image according to command-line parameter
// 1: mirror image
// 2: upside down image
// 3: rotate to the right 90 degrees
if (atoi(argv[1]) == 1)
{
my_Mirror(image);
}
if (atoi(argv[1]) == 2)
{
my_Flip(image);
}
if (atoi(argv[1]) ==3)
{
rotate(image);
}
print(image);
return 0;
}
镜子:
void my_Mirror(struct pixel a[])
{
int i,j,limit = 0;
struct pixel temp;
for(j = 0; j < g_height; ++j) //move through vertical pixels
{
for( i = 0; i < (g_width/2); i++)
{
temp = a[(j * g_width) + i];
a[(j * g_width) + i] = a[((j+1)*g_width) - (1 + i)];
a[((j+1)*g_width) - (1 + i)] = temp;
}
}
}
这是我的水平翻转功能,如果有帮助,它会一直工作到镜像调用:
#include "transform.h"
void my_Flip(struct pixel a[])
{
struct pixel temp;
int i;
int j = 0;
for (i = (g_width * g_height); i >= 0; --i)
{
temp = a[i];
a[i] = a[(i-i)+j]; //swap values of pixels
a[(i-i)+j] = temp;
++j;
if(j == (g_width * g_height)/2)
{
i = 0;
}
}
my_Mirror(a);
}