2013-10-29 25 views
0

我試圖構建一個PPM文件,這將使我這個標誌的形象:600(行)圖像Gimp爲什麼抱怨「文件過早結束」?

enter image description here

這是一個1200(列)和垂直的紅色的寬度酒吧是300列。我已經編寫了代碼,它編譯得很好,但是當我嘗試在Gimp中查看ppm文件時,它抱怨:文件過早結束。我不知道發生了什麼,因爲我使用完全相同的格式爲兩個以前的標誌構造了ppm文件(只是循環不同),並且由Gimp顯示(儘管我遇到了一些麻煩,我必須重新啓動Gimp幾次)。

這裏是我這個標誌代碼:

#include <stdio.h> 

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

    int widthGreen, widthWhite, widthBlack, widthVertical, width, height, i, j; 
    unsigned char Rcolor, Bcolor, Gcolor; 

    widthGreen = 200; 
    widthWhite = 400; 
    widthBlack = 600; 
    widthVertical = 300; 
    width = 1200; 
    height = 600; 

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

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

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

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

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

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

    for (j = 401; j <= widthBlack; j++) { 
     for (i = 400; i < width; i++) { 
     Rcolor = 0; 
     Gcolor = 0; 
     Bcolor = 0; 

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

    return (0); 
} 
+1

你仍然有同樣的問題在你前面的問題。您不能將寬度和高度視爲簡單的計數器,您必須將它們和每個點視爲圖像中的像素。再加上我在(接受的)答案中指出的其他問題。 –

+0

好的,謝謝! – Karen

+0

哦,等等,但是,我不能把所有的東西都放在同一個環中,就像它們都有不同的高度:(而且垂直條的寬度比三個水平條的寬度還要寬: – Karen

回答

1

最終圖像本身仍具有相同的高度。因此,循環高度,並在該循環中寫入一行的像素。紅色部分很簡單,因爲它是完整的高度。對於其他顏色,您必須檢查當前高度並相應地更改顏色。

類似下面的(僞代碼):

for (h = 0; h < height; ++h) 
{ 
    write_color(300, red); 

    if (h < 200) 
     color = green; 
    else if (h < 400) 
     color = white; 
    else 
     color = black; 

    write_color(900, color); 
} 
+0

啊,好的!謝謝!你真是太棒了! – Karen

相關問題