2013-10-29 5 views
1

작업은 800 열과 600 행이있는 이미지에 러시아 국기의 이미지를 만드는 것입니다. 나는에 의해 생성 된 이미지를 보았을 때왜 내 ppm 파일의 이미지가 약간 벗어 납니까?

#include <stdio.h> 

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

    int width, heightWhite, heightBlue, heightRed, i, j; 
    unsigned char Rcolor, Bcolor, Gcolor; 

    width = 800; 
    heightWhite = 200; 
    heightBlue = 400; 
    heightRed = 600; 

    for (j = 0; j <= heightWhite; j++) { 
     for (i = 0; i <= width; i++) { 
     Rcolor = 255; 
     Bcolor = 255; 
     Gcolor = 255; 

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

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

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

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

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

    return (0); 
} 

그러나 : 그래서, 플래그가 여기 내 코드입니다 (하단 중간에 파란색, 빨간색 위에 흰색) 세 개의 동일한 부분

으로 나누어 져 내 프로그램에서 파란색과 빨간색 막대의 상단이 완전히 수평이 아니라는 것을 발견했습니다. 파란색 막대와 빨간색 막대의 위쪽이 이전 픽셀보다 높게 나타나는 행의 일부처럼 보입니다. 왜 내가 이걸 얻고 있는지. 나는 이미 강사의 ppm 파일을 김프 (이것은 ppm 파일을 보는 데 사용하는 파일 임)에서 실행했으며 라인은 완벽하게 평준화되었습니다. 어떤 아이디어?

(내 PPM 파일을 첨부하는 방법을 잘 모르겠지만, 여기가 같이하기로했다 무엇 : http://users.csc.calpoly.edu/~dekhtyar/101-Fall2013/labs/lab7.html) 당신은 각 행에 대해 한 번 더 픽셀을 인쇄하는

답변

0

합니다 ((그것은 최초의 플래그입니다) 각 색상의 마지막 행은 200 픽셀 이상을 인쇄합니다).

변경

for (i = 0; i <= width; i++) { 

for (i = 0; i < width; i++) { 

편집

에 :

하지만 어떻게 내가 말할 수있는 온 "< ="높이 하시나요? 모든 코드는 두 개의 루프로 실행 될 수

for (j = 0; j < heightWhite; j++) = 0...199 = 200 items 
for (j = 1; j <= heightWhite; j++) = 1...200 = 200 items 

참고 :

#include <stdio.h> 

int main(void) 
{ 
    int width = 800, height = 600, icolor = 0, i, j; 
    unsigned char color[][3] = { 
     {255, 255, 255}, /* white */ 
     {0, 0, 255},  /* blue */ 
     {255, 0, 0}  /* red */ 
    }; 

    printf("P6\n"); 
    printf("%d %d\n", width, height); 
    printf("255\n"); 

    for (i = 0; i < height; i++) { 
     for (j = 0; j < width; j++) { 
     printf("%c%c%c", color[icolor][0], color[icolor][1], color[icolor][2]); 
     } 
     if (i && (i % 200 == 0)) icolor++; /* 200, 400, 600 */ 
    } 
    return 0; 
} 
+0

아 내가 볼! 그냥 궁금 해서요,하지만 어떻게 높이를 "<="말할 수 있니? 도와 주셔서 감사합니다! – Karen

+0

@Karen, 편집했습니다 –

+0

귀하의 모듈로 트릭이 너무 영리하다고 생각합니다. 명시 적으로 각 색상에 대해 3 개의 루프로 다른 너비를 존중하면 IMO가 더 이해하기 쉽고 다른 너비의 색상 패치에서도 작동합니다. – shodanex