#include #include #define MAX_W 256 #define MAX_H 256 #define BUF 256 int w, h, i_img[MAX_W * MAX_H], o_img[MAX_W * MAX_H]; int read(); void write(); void superpose(); int main(){ superpose(); write(); return 0; } int read(){ FILE *fp; char filename[BUF], magic[3]; int r, i; printf("ファイル名を入力してください: "); if((r = scanf("%s", filename)) == EOF) return EOF; if((fp = fopen(filename, "r")) == NULL){ fprintf(stderr, "ファイル %s を開けません!\n", filename); exit(1); } fscanf(fp, "%2s", magic); fscanf(fp, "%d%d", &w, &h); if(w > MAX_W || h > MAX_H){ fprintf(stderr, "画像サイズが大きすぎます!\n"); fclose(fp); exit(2); } for(i = 0; i < w * h; i++) fscanf(fp, "%d", &i_img[i]); fclose(fp); return r; } void write(){ FILE *fp; int i; if((fp = fopen("out.pbm", "w")) == NULL){ fprintf(stderr, "out.pbm を開けません!\n"); exit(3); } fprintf(fp, "P1\n%d %d\n", w, h); for(i = 0; i < w * h; i++){ fprintf(fp, "%d%c", o_img[i], ((i + 1) % w == 0) ? '\n' : ' '); } fclose(fp); } void superpose(){ int first = 1, oldw = 0, oldh = 0, i; while(1){ if(read() == EOF) break; printf("width = %d, height = %d\n", w, h); if(first){ oldw = w; oldh = h; for(i = 0; i < w * h; i++) o_img[i] = i_img[i]; first = 0; }else{ if(w != oldw || h != oldh){ fprintf(stderr, "画像サイズが異なります!\n"); exit(4); } for(i = 0; i < w * h; i++) if(i_img[i] != 0) o_img[i] = 1; } } if(first){ fprintf(stderr, "画像が入力されていません!\n"); exit(5); } }