首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PPM图像旋转90度

将PPM图像旋转90度
EN

Stack Overflow用户
提问于 2013-04-03 15:48:07
回答 2查看 1.8K关注 0票数 0

我正在尝试将一张PPM图像旋转90度。我目前可以将图像旋转180度。我不知道该怎么做。

我知道高度和宽度是互换的,但我不确定从哪里开始。

代码语言:javascript
复制
void write_ppm_image(const char *filename, Image_ppm *img)
{
FILE *fp;
//open file for output
fp = fopen(filename, "wb");
if (!fp) {
    fprintf(stderr, "Unable to open file '%s'\n", filename);
    exit(1);
}

//write the header file
//image format
fprintf(fp, "P6\n");

//comments
fprintf(fp, "# Created by %s\n",CREATOR);

//image size
fprintf(fp, "%d %d\n",img->x,img->y);

// rgb component depth
fprintf(fp, "%d\n",RGB_COMPONENT_COLOR);

// pixel data
fwrite(img->data, 3 * img->x, img->y, fp);
fclose(fp);
}


 void rotatePPM(Image_ppm *img)
 {
int x = 0, y = 0;
int size = img->x*img->y;
int width = img->x;
int height = img->y;

if(img)
{

    for(i=0;i<size;i++)
    {
        int temp = img->data[i].red;
        int temp_one = img->data[i].green;
        int temp_two = img->data[i].blue;
        img->data[i].red = img->data[size].red;
        img->data[i].green = img->data[size].green;
        img->data[i].blue = img->data[size].blue;
        img->data[size].red = temp;
        img->data[size].green = temp_one;
        img->data[size].blue = temp_two;
        size--;
    }

}
 }

 int main()
 {
char  filename[256];
printf("Enter the name of a PPM image file: \n");
scanf("%s",filename);
Image_ppm *image;
image = read_ppm_image(filename);
rotatePPM(image);
write_ppm_image("can_bottom3.ppm",image);
printf("Press any key...");
getchar();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-03 16:00:49

虽然我从来没有实现过任何旋转算法,但我认为先在纸上实现它会有所帮助。

在正方形的纸上画一个矩形,每个正方形代表一个像素。用像素的坐标标记每个正方形。然后将纸旋转90度,画出第二个同样大的矩形,每个“像素”都标有坐标。

现在,当您将纸张转回以使第一个矩形正常时,您可以很容易地看到在输出(第二个)矩形中放置像素的位置。

找到一个通用的算法应该不会太难。

票数 3
EN

Stack Overflow用户

发布于 2013-04-03 16:01:00

您的方法似乎非常痛苦,而且只适用于PPM。

相反,您可以简单地使用ImageMagick mogrifyGraphicsMagick gm mogrify实用程序。您可以下载大小小于2MB的静态编译版本的GraphicsMagick gm

对于任何图像处理,gm都可以被认为是“瑞士军刀”。除了让它变得简单之外,它不仅支持PPM,而且几乎支持任何其他已知的图形格式,毫不费力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15781703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档