#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;
COLOR data[WIDTH][HEIGHT];
unsigned char graydata[WIDTH][HEIGHT];
int main(){
int i, j;
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[i][j].b = getc(fp);
data[i][j].g = getc(fp);
data[i][j].r = getc(fp);
}
}
fclose(fp);
for(i=0; i<WIDTH; i++){
for(j=0; j<HEIGHT; j++){
graydata[i][j] = (data[i][j].r + data[i][j].g + data[i][j].b) / 3;
}
}
// 輝度平均算出
int sum = 0;
for(j=0; j<HEIGHT; j++){
for (i=0; i<WIDTH; i++){
// r, g, b は全て同じ値が入っているものと仮定
sum += data[j][i].g;
}
}
// 2値変換
int average = sum/(WIDTH*HEIGHT);
for(j=0; j<HEIGHT; j++){
for(i=0; i<WIDTH; i++) {
if (data[j][i].g < average){
data[j][i].r = data[j][i].g = data[j][i].b = 0;
}else{
data[j][i].r = data[j][i].g = data[j][i].b = 255;
}
}
}
fwrite(header, 1, 54, out);
for(j=HEIGHT-1; j<=0; j--){
for(i=0; i<WIDTH; i++){
fputc(data[i][j].b, out);
fputc(data[i][j].g, out);
fputc(data[i][j].r, out);
}
}
fclose(out);
return 0;
}