为什么我的图像不符合我的预期?

时间:2013-10-29 07:44:09

标签: c image ppm

所以,我必须创建一个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);
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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(用于列)而不是i