>C言語を学ぶということと、どう実行するかは別の話です。
どういう環境で実行しようとしてるのかを聞いてるんだと思いますが。すくなくともOSぐらいは掲示してください。
OSはWindows 7 home Premium です。
>C言語を学んでおらず、と最初に言ってますが、そんな人がなんでこの講義を取ってるのでしょう?
たしかにそういわれてしまえばそうなのですが、しかし冒頭に書いておりますが、「話せば長くなる」で察し手いただければ幸いです。ただならぬ理由があります。そこまで理由が知りたければ教えますが。
課題の内容
BMP形式のカラー画像を読み込んで二値画像を出力するプログラムを作成せよ。
私が書いたプログラム(メモ帳で描き、.cで保存してある)
#define WIDTH 640
#define HEIGHT 480
#include <stdio.h>
#include <stdlib.h>
typedef struct color {
unsigned char r;
unsigned char g;
unsigned char b;
} COLOR;
int main() {
int i, j;
COLOR data[WIDTH][HEIGHT];
COLOR outdata[WIDTH][HEIGHT];
FILE *fp;
FILE *out;
char header[54];
if ((fp = fopen("image.bmp", "rb")) == NULL) {
fprintf(stderr, "file open error");
exit(1);
}
if ((out = fopen("out.bmp", "wb")) == NULL) {
fprintf(stderr, "file open error");
exit(1);
}
fread(header, 1, 54, fp);
for (j = HEIGHT-1; j >= 0; j--) {
for (i = 0; i < WIDTH; i++) {
data
[j].b = getc(fp);
data[j].g = getc(fp);
data[j].r = getc(fp);
}
}
fclose(fp);
unsigned char gray:
for (i = 0; i < WIDTH; i++) {
for (j = 0; j < HEIGHT; j++) {
gray = (data[j].r + data[j].g + data[j].g)/3;
outdata[j].r = gray;
outdata[j].g = gray;
outdata[j].b = gray;
}
}
unsigned char gray:
unsigned threshold = 127;
for (i = 0; i < WIDTH; i++) {
for (j = 0; j < HEIGHT; j++) {
gray = (data[j].r + data[i][j].g + data[i][j].g > (3*threshold) ? 255: 0);
outdata[i][j].r = gray;
outdata[i][j].g = gray;
outdata[i][j].b = gray;
}
}
fwrite(header, 1, 54, out);
for (j = HEIGHT-1; j >= 0; j--) {
for (i = 0; i < WIDTH; i++) {
fputc(outdata[i][j].b, out);
fputc(outdata[i][j].g, out);
fputc(outdata[i][j].r, out);
}
}
fclose(out);
return 0;
}
このプログラムはほとんど調べたり配布されたヒントを元にコピペしたり書いたりしたので、C言語を理解してかいているわけではありません。おそらく間違いだらけだと思います。
実行する際に参考にしたサイト
http://guppy.eng.kagawa-u.ac.jp/~kagawa ... rompt.html
宜しくお願いします。