/*
========================================================= */
/* 画像処理の枠組み */
/* 8bit BMP を読み込み, */
/* ラスタデータを一旦プログラム内に蓄え, */
/* そのまま出力するプログラム */
/* モノクロ反転ver */
/* */
/* 2003.11.26 i-0208 上村 健太郎 */
/* */
/*
========================================================= */
#include<stdio.h>
int main()
{
/* ヘッダー格納用配列 */
unsigned char head[15][4];
/* 画像のラスタデータ格納用配列 */
unsigned char
data1[1000][1000]; /* 原データ */
unsigned char
data2[1000][1000]; /* 処理結果 */
/* CLUT格納用配列 */
unsigned char clut[256][4];
int i,j;
int haba,tate;
/*
======================================================== */
/* ファイルの読み込み: */
/*
======================================================== */
/*
-----------------------------------*/
/* headの読み込み: */
/*
-----------------------------------*/
/* ファイルヘッダの読み込み */
/* 'BM'の読み込み(2bytes) */
head[0][0]=getchar();
head[0][1]=getchar();
/* ファイルサイズの読み込み(4bytes) */
for(i=0;i<4;i++){
head[1][i]=getchar();
}
/* 未使用分の読み込み(4bytes) */
for(i=0;i<4;i++){
head[2][i]=getchar();
}
/* オフセットの読み込み(4bytes) */
for(i=0;i<4;i++){
head[3][i]=getchar();
}
/* インフォメーションヘッダの読み込み */
/* ヘッダサイズの読み込み(4bytes) */
for(i=0;i<4;i++){
head[4][i]=getchar();
}
/* 「画像の幅」の読み込み(4bytes) */
for(i=3;i>=0;i--){
head[5][i]=getchar();
}
haba=0;
for(i=0;i<4;i++){
haba=haba*256+head[5][i];
}
/* 「画像の高さ」の読み込み(4bytes) */
for(i=3;i>=0;i--){
head[6][i]=getchar();
}
tate=0;
for(i=0;i<4;i++){
tate=tate*256+head[6][i];
}
/* プレーン数の読み込み(2bytes) */
for(i=0;i<2;i++){
head[7][i]=getchar();
}
/* カラービット数の読み込み(2bytes) */
for(i=0;i<2;i++){
head[8][i]=getchar();
}
/* 圧縮方式の読み込み(4bytes) */
for(i=0;i<4;i++){
head[9][i]=getchar();
}
/* 画像データサイズの読み込み(4bytes) */
for(i=0;i<4;i++){
head[10][i]=getchar();
}
/* 水平解像度の読み込み(4bytes) */
for(i=0;i<4;i++){
head[11][i]=getchar();
}
/* 垂直解像度の読み込み(4bytes) */
for(i=0;i<4;i++){
head[12][i]=getchar();
}
/* 使用する色数の読み込み(4bytes) */
for(i=0;i<4;i++){
head[13][i]=getchar();
}
/* 重要色数の読み込み(4bytes) */
for(i=0;i<4;i++){
head[14][i]=getchar();
}
/*
-----------------------------------*/
/* CLUTの読み込み: */
/*
-----------------------------------*/
for(j=0;j<256;j++){
for(i=0;i<4;i++){
clut[j][i]=getchar();
}
}
/*
-----------------------------------*/
/* ラスタデータの読み込み: */
/*
-----------------------------------*/
for(j=0;j<tate;j++){
for(i=0;i<haba;i++){
data1[j][i]=getchar();
}
}
/*
=================================================================== */
/* (画像処理の本体)
*/
/*
*/
for(j=0;j<tate;j++){
for(i=0;i<haba;i++){
data2[j][i] = 255-data1[j][i];
}
}
/*
*/
/*
=================================================================== */
/*
======================================================== */
/* ファイルの書き出し: */
/*
======================================================== */
/*
-----------------------------------*/
/* headの書き出し: */
/*
-----------------------------------*/
/* ファイルヘッダの書き出し
*/
/* 'BM'の書き出し(2bytes) */
putchar(head[0][0]);
putchar(head[0][1]);
/* ファイルサイズの書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[1][i]);
}
/* 未使用分の書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[2][i]);
}
/* オフセットの書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[3][i]);
}
/* インフォメーションヘッダの書き出し */
/* ヘッダサイズの書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[4][i]);
}
/* 「画像の幅」の書き出し(4bytes) */
for(i=3;i>=0;i--){
putchar(head[5][i]);
}
/* 「画像の高さ」の書き出し(4bytes) */
for(i=3;i>=0;i--){
putchar(head[6][i]);
}
/* プレーン数の書き出し(2bytes) */
for(i=0;i<2;i++){
putchar(head[7][i]);
}
/* カラービット数の書き出し(2bytes) */
for(i=0;i<2;i++){
putchar(head[8][i]);
}
/* 圧縮方式の書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[9][i]);
}
/* 画像データサイズの書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[10][i]);
}
/* 水平解像度の書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[11][i]);
}
/* 垂直解像度の書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[12][i]);
}
/* 使用する色数の書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[13][i]);
}
/* 重要色数の書き出し(4bytes) */
for(i=0;i<4;i++){
putchar(head[14][i]);
}
/*
-----------------------------------*/
/* CLUTの書き出し: */
/*
-----------------------------------*/
for(j=0;j<256;j++){
for(i=0;i<4;i++){
putchar(clut[j][i]);
}
}
/*
-----------------------------------*/
/* ラスタデータの書き出し: */
/*
-----------------------------------*/
for(j=0;j<tate;j++){
for(i=0;i<haba;i++){
putchar(data2[j][i]);
}
}
}