画像処理論でよく使っているPGMファイル

画像処理論(火曜一限)で、時々プログラムの課題が出るのだよ。
それ自体は別に難しいこともないのですがPGMファイルというのをよく使っています
ld.jpg
たとえばこのような画像。
ようするに白黒に近いモノクロ画像なんですがWindows標準では開けません。
Linuxでは標準で使えるんだけどねー。
中身は
 55 62 120 255 ・・・
みたいな感じで値が並んでいるのです。
これを読み込んで処理するのが課題なのだよー。
読み込むのは標準で与えられてるんだけどね。

#define STRING_BUFFER  24
#define PGM_MAXNUM  16
int getsize(char* name, int *width, int *height){
FILE *fi;
char buffer[STRING_BUFFER];
int point = 0;
int counter= 0;
if((fi = fopen(name,"r")) == NULL){
fprintf(stderr, "File not found. - %s -\n",name);
exit(1);
}
while(!feof(fi)){
while((buffer[point] = (char)getc(fi)) != ' '
&& buffer[point] != '\n' && !feof(fi)){
point++;
if(point > STRING_BUFFER){
fprintf(stderr, "Buffer Overflow\n");
exit(1);
}
}
if(buffer[0] >= (int)'0' && buffer[0] <= (int)'9'){
counter++;
if(counter == 1){
*width = atoi(buffer);
}else if(counter == 2){
*height = atoi(buffer);
}else{
fclose(fi);
return 0;
}
}
point=0;
}
fclose(fi);
return 1;
}
void input(char* name, int *image, int width, int height)
{
FILE *fi;
char buffer[STRING_BUFFER];
int point = 0, counter = -4;
if((fi = fopen(name,"r")) == NULL){
fprintf(stderr, "File not found. - %s -\n",name);
exit(1);
}
while(!feof(fi)){
while((buffer[point] = (char)getc(fi)) != ' '
&& buffer[point] != '\n' && !feof(fi)){
point++;
if(point > STRING_BUFFER){
fprintf(stderr, "Buffer Overflow\n");
exit(1);
}
}
buffer[point] = '\0';
if(buffer[0] >= (int)'0' && buffer[0] <= (int)'9'){
counter++;
if(counter >= 0 && counter < height*width){
image[counter] = atoi(buffer);
}
}
point = 0;
}
fclose(fi);
return;
}
void output(char* name, int *image,int width, int height)
{
FILE *fo;
int i = 0;
if((fo = fopen(name,"w")) == NULL){
fprintf(stderr, "File not found. - %s -\n",name);
exit(1);
}
fprintf(fo,"P2\n%d %d\n255\n",width,height);
for(i = 0; i < height*width; i++){
if(i != 0 && i % PGM_MAXNUM == 0){
fprintf(fo, " \n");
}else if(i != 0){
fprintf(fo, " ");
}
fprintf(fo, "%d", image[i]);
}
fprintf(fo," \n");
fclose(fo);
return;
}
まぁ、一切読んでないけど・・・。
余裕が出たら読んでみますかね?

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です