>>326
読み込むだけなら、いろいろ計算せずに、こんな感じでいけると思うんだけど。

BITMAPFILEHEADER fileHeader;
char *buff;
int bodySize;
BITMAPINFO* bitmapInfo;
RGBQUAD*rgbuad;
char* data;

// とりあえずヘッダーだけ読む
read(fh, &fileHeader, sizeof(fileHeader));

// 残りを読み込むバッファを確保
bodySize = fileHeader.FileSize - sizeof(BITMAPFILEHEADER);
buff = (char*) malloc(bodySize);

// 残りを一気に読み込む
read(fh, buff, bodySize);


// BITMAPINFO の開始位置を計算
bitmapInfo = (BITMAPINFO*) buff;

// RGBQUAD の開始位置は計算
rgpQuad = (RGBQUAD*) (buff + sizeof(BITMAPINFOHEADER));

// ビットマップデータの開始位置を計算
data = buff + fileHeader.Offset - sizeof(BITMAPFILEHEADER);


// あとは、bitmapInfo, rgbQuad, data を利用して好きに料理する