2013-10-29 40 views
0

所以,我必须创建一个ppm文件,它会给我意大利国旗的图像(从左到右,绿色,白色,然后红色的顺序是3个垂直条)。图像必须是600×400(逐行)我试过多次重写我的代码,但是,我的图像只是水平放置的三个横条而不是垂直。此外,线条并不完全平坦。但最大的问题是,为什么我的绿色,白色和红色酒吧不是垂直的?任何帮助是极大的赞赏。为什么我的图片不符合我期望的样子?

这里是我的代码:

#include <stdio.h> 

int main() { 
    printf("P6\n"); 
    printf("%d %d\n", 600, 400); 
    printf("255\n"); 

    int height, widthGreen, widthWhite, widthRed, i, j; 
    unsigned char Rcolor, Bcolor, Gcolor; 

    widthGreen = 200; 
    widthWhite = 400; 
    widthRed = 600; 
    height = 400; 

    for (j = 0; j < height; j++) { 
     for (i = 0; i < widthGreen; i++) { 
     Rcolor = 0; 
     Gcolor = 128; 
     Bcolor = 0; 

     printf("%c%c%c", Rcolor, Gcolor, Bcolor); 
     } 
    } 

    for (j = 0; j < height; j++) { 
     for (i = 201; i <= widthWhite; i++) { 
     Rcolor = 255; 
     Gcolor = 255; 
     Bcolor = 255; 

     printf("%c%c%c", Rcolor, Gcolor, Bcolor); 
     } 
    } 

    for (j = 0; j < height; j++) { 
     for (i = 401; i <= widthRed; i++) { 
     Rcolor = 255; 
     Gcolor = 0; 
     Bcolor = 0; 

     printf("%c%c%c", Rcolor, Gcolor, Bcolor); 
     } 
    } 

    return (0); 
} 
+0

可能重复[为什么我的图像从我的ppm文件有点关闭?](http://stackoverflow.com/questions/19651249/why-is-my-image-from-my-ppm-file -a,小关) – shodanex

回答

0

四件事情:第一是值之间加空格。第二个是在每行之后添加新行。第三种是将值打印为(无符号)整数,而不是作为字符,255128都不会打印为有效字符。第四个是使用一个环路的高度,其中有三个环路用于颜色。将循环计数器视为像素,而您会理解为什么。

0

你为什么使用printf?您应该使用i和j索引来构建并索引到数组中。在您的代码中,i和j变量仅用作循环计数器,而不是坐标。

你在做什么:

for each line 
    print some green 

for each line 
    print some white 

for each line 
    print some red 

什么,你应该做的:

for each line 
    print some green 
    print some white 
    print some red 

您也可以使用更有意义的变量名,如行,而不是J和COL(列),而不是我

相关问题