C 疑似カラー画像の作成方法が分からない。

C

1/* ppmpgm.h */2 3#define MAX_IMAGESIZE 1024 4#define MAX_BRIGHTNESS 255 5#define GRAYLEVEL 256 6#define MAX_FILENAME 256 7#define MAX_BUFFERSIZE 256 8 9unsigned char pimage1[3][MAX_IMAGESIZE][MAX_IMAGESIZE],10 pimage2[3][MAX_IMAGESIZE][MAX_IMAGESIZE];11float ptmp[3][MAX_IMAGESIZE][MAX_IMAGESIZE];12int pXdim1, pYdim1, 13 pXdim2, pYdim2; 14 15unsigned char gimage1[MAX_IMAGESIZE][MAX_IMAGESIZE],16 gimage2[MAX_IMAGESIZE][MAX_IMAGESIZE];17float gtmp[MAX_IMAGESIZE][MAX_IMAGESIZE];18int gXdim1, gYdim1, 19 gXdim2, gYdim2; 20 21void load_image_ppm(void); 22void save_image_ppm(void); 23void load_image_pgm(void); 24void save_image_pgm(void); 25 26void load_image_ppm(void)27{28 char file_name[MAX_FILENAME]; /* ファイル名用の文字列 */29 char buffer[MAX_BUFFERSIZE]; /* デ-タ読み込み用作業変数 */30 FILE *fp; /* ファイルポインタ */31 int max_gray; /* 最大階調値 */32 int x,y,k; /* ル-プ変数 */33 34 /* 入力ファイルのオ-プン */35 printf("-------------------------------------\n");36 printf(" カラ-画像入力ル-チン\n");37 printf("-------------------------------------\n");38 printf("file形式はppm、バイナリ形式とします。\n");39 printf("入力file名(*.ppm):");40 scanf("%s",file_name);41 fp=fopen(file_name,"rb");42 if(NULL==fp){43 printf("その名前のfileは存在しません。\n");44 exit(1);45 }46 47 /* ファイルタイプ(=P6)の確認 */48 fgets(buffer,MAX_BUFFERSIZE,fp);49 if(buffer[0]!='P' || buffer[1]!='6'){50 printf("fileのフォ-マットがP6とは異ります。\n");51 exit(1);52 }53 54 /* pXdim1, pYdim1の代入(#から始まるコメントは読み飛ばす) */55 pXdim1 = 0;56 pYdim1 = 0;57 while(pXdim1 == 0 || pYdim1 == 0){58 fgets(buffer,MAX_BUFFERSIZE,fp);59 if(buffer[0]!='#'){60 sscanf(buffer,"%d %d",&pXdim1,&pYdim1);61 }62 }63 64 /* max_grayの代入(#から始まるコメントは読み飛ばす) */65 max_gray = 0;66 while(max_gray == 0){67 fgets(buffer, MAX_BUFFERSIZE,fp);68 if(buffer[0]!='#'){69 sscanf(buffer,"%d",&max_gray);70 }71 }72 73 /* パラメ-タの画面への表示 */74 printf("横の画素数 = %d, 縦の画素数 = %d\n", pXdim1, pYdim1);75 printf("最大階調値 = %d\n",max_gray);76 if(pXdim1 > MAX_IMAGESIZE || pYdim1 > MAX_IMAGESIZE){77 printf("想定値 %d x %d を超えています。\n",78 MAX_IMAGESIZE,MAX_IMAGESIZE);79 printf("もう少し小さい画像を使って下さい。\n");80 exit(1);81 }82 if(max_gray != MAX_BRIGHTNESS){83 printf("最大階調値が不適切です。\n");84 exit(1);85 }86 87 /* 画像デ-タを読み込んで画像配列に代入する */88 for(y=0; y<pYdim1; y++){89 for(x=0;x<pXdim1; x++){90 for(k=0;k<3;k++)91 pimage1[k][y][x] = (unsigned char)fgetc(fp);92 }93 }94 95 printf("デ-タは正しく読み込まれました。\n");96 printf("--------------------------------------\n");97 fclose(fp);98}99 100/*------------------------------------------------------------------------ 101 関数名:save_image_ppm() 102 機能: 画像デ-タ、横画素数、縦画素数を書き込み。 103 入力: 函数の中に出力ファイル名を聞かれる。 104 pimage2:画像デ-タ 105 pXdim2:横画素数 106 pYdim2:縦画素数 107 出力: 画像ファイルである。 108------------------------------------------------------------------------*/109void save_image_ppm(void)110{111 char file_name[MAX_FILENAME]; /* ファイル名用の文字配列 */112 FILE *fp; /* ファイルポインタ */113 int x,y,k; /* ル-プ変数 */114 115 /* 出力ファイルのオ-プン */116 printf("------------------------------------\n");117 printf(" カラ-画像(ppm形式)出力ル-チン\n");118 printf("------------------------------------\n");119 printf("出力file名(*.ppm):");120 scanf("%s",file_name);121 fp = fopen(file_name,"wb");122 123 /* ファイル識別子 "P6" を先頭に出力する */124 fputs("P6\n",fp);125 /* #で始まるコメント行(省略可能) */126 fputs("# Created by H.I.T\n",fp);127 /* 画像の横幅、縦幅の出力 */128 fprintf(fp,"%d %d\n",pXdim2,pYdim2);129 /* 最大階調値の出力 */130 fprintf(fp,"%d\n",MAX_BRIGHTNESS);131 132 /* 画像デ-タの出力 */133 for(y=0; y<pYdim2; y++){134 for(x=0; x<pXdim2; x++){135 for(k=0;k<3;k++)136 fputc(pimage2[k][y][x],fp);137 }138 }139 140 printf("デ-タは正しく出力されました。\n");141 printf("------------------------------------\n");142 fclose(fp);143}144 145/*------------------------------------------------------------------------ 146 関数名:load_image_pgm() 147 機能: 画像デ-タ、横画素数、縦画素数を読み込み。 148 入力: 函数の中に入力ファイル名を聞かれる。 149 出力: gimage1:画像デ-タ 150 gXdim1:横画素数 151 gYdim1:縦画素数 152------------------------------------------------------------------------*/153void load_image_pgm(void)154{155 char file_name[MAX_FILENAME]; /* ファイル名用の文字列 */156 char buffer[MAX_BUFFERSIZE]; /* デ-タ読み込み用作業変数 */157 FILE *fp; /* ファイルポインタ */158 int max_gray; /* 最大階調値 */159 int x,y; /* ル-プ変数 */160 161 /* 入力ファイルのオ-プン */162 printf("-------------------------------------\n");163 printf(" モノクロ階調画像入力ル-チン\n");164 printf("-------------------------------------\n");165 printf("file形式はpgm、バイナリ形式とします。\n");166 printf("入力file名(*.pgm):");167 scanf("%s",file_name);168 fp=fopen(file_name,"rb");169 if(NULL==fp){170 printf("その名前のfileは存在しません。\n");171 exit(1);172 }173 174 /* ファイルタイプ(=P5)の確認 */175 fgets(buffer,MAX_BUFFERSIZE,fp);176 if(buffer[0]!='P' || buffer[1]!='5'){177 printf("fileのフォ-マットがP5とは異ります。\n");178 exit(1);179 }180 181 /* gXdim1, gYdim1の代入(#から始まるコメントは読み飛ばす) */182 gXdim1 = 0;183 gYdim1 = 0;184 while(gXdim1 == 0 || gYdim1 == 0){185 fgets(buffer,MAX_BUFFERSIZE,fp);186 if(buffer[0]!='#'){187 sscanf(buffer,"%d %d",&gXdim1,&gYdim1);188 }189 }190 191 /* max_grayの代入(#から始まるコメントは読み飛ばす) */192 max_gray = 0;193 while(max_gray == 0){194 fgets(buffer, MAX_BUFFERSIZE,fp);195 if(buffer[0]!='#'){196 sscanf(buffer,"%d",&max_gray);197 }198 }199 200 /* パラメ-タの画面への表示 */201 printf("横の画素数 = %d, 縦の画素数 = %d\n", gXdim1, gYdim1);202 printf("最大階調値 = %d\n",max_gray);203 if(gXdim1 > MAX_IMAGESIZE || gYdim1 > MAX_IMAGESIZE){204 printf("想定値 %d x %d を超えています。\n",205 MAX_IMAGESIZE,MAX_IMAGESIZE);206 printf("もう少し小さい画像を使って下さい。\n");207 exit(1);208 }209 if(max_gray != MAX_BRIGHTNESS){210 printf("最大階調値が不適切です。\n");211 exit(1);212 }213 214 /* 画像デ-タを読み込んで画像配列に代入する */215 for(y=0; y<gYdim1; y++){216 for(x=0;x<gXdim1; x++){217 gimage1[y][x] = (unsigned char)fgetc(fp);218 }219 }220 221 printf("デ-タは正しく読み込まれました。\n");222 printf("--------------------------------------\n");223 fclose(fp);224}225 226/*------------------------------------------------------------------------ 227 関数名:save_image_pgm() 228 機能: 画像デ-タ、横画素数、縦画素数を書き込み。 229 入力: 函数の中に出力ファイル名を聞かれる。 230 gimage2:画像デ-タ 231 gXdim2:横画素数 232 gYdim2:縦画素数 233 出力: 画像ファイルである。 234------------------------------------------------------------------------*/235void save_image_pgm(void)236{237 char file_name[MAX_FILENAME]; /* ファイル名用の文字配列 */238 FILE *fp; /* ファイルポインタ */239 int x,y; /* ル-プ変数 */240 241 /* 出力ファイルのオ-プン */242 printf("------------------------------------\n");243 printf(" モノクロ階調画像(pgm形式)出力ル-チン\n");244 printf("------------------------------------\n");245 printf("出力file名(*.pgm):");246 scanf("%s",file_name);247 fp = fopen(file_name,"wb");248 249 /* ファイル識別子 "P5" を先頭に出力する */250 fputs("P5\n",fp);251 /* #で始まるコメント行(省略可能) */252 fputs("# Created by H.I.T\n",fp);253 /* 画像の横幅、縦幅の出力 */254 fprintf(fp,"%d %d\n",gXdim2,gYdim2);255 /* 最大階調値の出力 */256 fprintf(fp,"%d\n",MAX_BRIGHTNESS);257 258 /* 画像デ-タの出力 */259 for(y=0; y<gYdim2; y++){260 for(x=0; x<gXdim2; x++){261 fputc(gimage2[y][x],fp);262 }263 }264 265 printf("デ-タは正しく出力されました。\n");266 printf("------------------------------------\n");267 fclose(fp);268}269

コメントを投稿

0 コメント