0

このフラグのイメージを表示する ppm ファイルを作成しようとしています。

ここに画像の説明を入力

これは 1200 (列) x 600 (行) の画像で、縦の赤いバーの幅は 300 列です。私はすでにコードを書いており、問題なくコンパイルできましたが、Gimp で ppm ファイルを表示しようとすると、次のように不平を言います: ファイルの終了が早すぎます。以前の 2 つのフラグの ppm ファイルをまったく同じ形式 (for ループが異なるだけ) で作成し、それらが 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);
}
4

1 に答える 1

1

最終的な画像自体は同じ高さです。したがって、高さをループし、そのループでピクセルの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);
}
于 2013-10-29T09:27:27.070 に答える