/* 24ビットフルカラー画像を8ビットのモノクローム画像に変換 */
画像の解析プログラム
/* リトルエンディアン ルーチン */
#include<stdio.h>
void
endeian2(int x){
int i;
unsigned char lit[2];
for(i=0;i<2;i++){
lit[i] =x%256;
x=x/256;
}
for(i=0;i<2;i++){
putchar(lit[i]);
}
}
void
endeian4(int x){
int i;
unsigned char lit[4];
for(i=0;i<4;i++){
lit[i] =x%256;
x=x/256;
}
for(i=0;i<4;i++){
putchar(lit[i]);
}
}
int
main(void) /* メインプログラム */
{
unsigned
char head[15][4];
unsigned
char data[1000][1000][3];
int haba1,haba2;
int tate;
int XXX;
int i,j,k;
/*-------------------------------*/
/* ファイル入力 */
/*-------------------------------*/
/*
ファイルヘッダ */
/* BM
*/
head[0][0]=getchar();
head[0][1]=getchar();
/* ファイルサイズ
*/
for(i=0;i<4;i++){
head[1][i]=getchar();
}
/* 未使用
*/
for(i=0;i<4;i++){
head[2][i]=getchar();
}
/* オフセット
*/
for(i=0;i<4;i++){
head[3][i]=getchar();
}
/*--------------------------------*/
/* インフォメーションヘッダ */
/* ヘッダサイズ
*/
for(i=0;i<4;i++){
head[4][i]=getchar();
}
/* 画像幅
*/
for(i=0;i<4;i++){
head[5][i]=getchar();
}
/*画像幅読み込み */
haba1=0;
for(i=0;i<4;i++){
haba1=haba1*256+head[5][i];
haba2=(haba1/4)*4;
/* 画像高さ
*/
for(i=0;i<4;i++){
head[6][i]=getchar();
}
/*画像高さ読み込み */
tate=0;
for(i=0;i<4;i++){
tate=tate*256+head[6][i];
}
/* プレーン数
*/
for(i=0;i<2;i++){
head[7][i]=getchar();
}
/* カラービット
*/
for(i=0;i<2;i++){
head[8][i]=getchar();
}
/* 圧縮方式
*/
for(i=0;i<4;i++){
head[9][i]=getchar();
}
/* 画像データサイズ*/
for(i=0;i<4;i++){
head[10][i]=getchar();
}
/* 水平解像度
*/
for(i=0;i<4;i++){
head[11][i]=getchar();
}
/* 垂直解像度
*/
for(i=0;i<4;i++){
head[12][i]=getchar();
}
/* 使用色数
*/
for(i=0;i<4;i++){
head[13][i]=getchar();
}
/*----- 画像データ -------- */
XXX=(haba1*3)%4;
for(j=0;j<tate;j++){
for(i=0;i<haba1;i++){
for(k=0;k<3;k++){
data[j][i][k]=getchar();
}
}
for(i=XXX; (i%4) !=0;i++){
data[j][i][k]=getchar();
}
}
/*-------------------------------*/
/* ファイル出力 */
/*-------------------------------*/
/*
ファイルヘッダ */
/* BM
*/
putchar(head[0][0]);
putchar(head[0][1]);
/* ファイルサイズ
*/
endeian4(54+(256*4)+(haba2*tate));
/* 未使用
*/
endeian4(0);
/* オフセット */
endeian4(54+(256*4));
/*--------------------------------*/
/* インフォメーションヘッダ */
/* ヘッダサイズ
*/
endeian4(40);
/* 画像幅
*/
endeian4(haba2);
/* 画像高さ
*/
endeian4(tate);
/* プレーン数
*/
endeian2(1);
/* カラービット
*/
endeian2(8);
/* 圧縮方式
*/
endeian4(0);
/* 画像データサイズ*/
endeian4(haba2 * tate);
/* 水平解像度
*/
for(i=0;i<4;i++){
putchar(head[11][i]);
}
/* 垂直解像度
*/
for(i=0;i<4;i++){
putchar(head[12][i]);
}
/* 使用色数
*/
endeian4(256);
/* 重要色数
*/
endeian4(0);
/* CLUT
*/
for(i=0;i<256;i++){
putchar(i);
putchar(i);
putchar(i);
putchar(0);
}
/*-----------------------*/
/* 画像データ モノクロ化 */
for(j=0;j<tate;j++){
for(i=0;i<haba1;i++){
putchar((data[j][i][0]+data[j][i][1]+data[j][i][2])/3);
}
}
}
}
/* プログラム終了------------------------------------ */