Bitmap解析

今日からようやく学校が始まりました。
 
今日は画像処理で、Bitmapを読み込んでヘッダ情報を書き出すというものでした。
 
しかし、、、残念ながら時間内に完成できず、
Cのファイル入出力と文字列処理やらが理解できてないことが判明してしまいました、、。
 
よく、
「分からないことをちゃんと調べられることが、プログラマーとして大切なスキル」
といいますが、
この程度は、調べなくてもできるようにしないとダメですね、、。
 
「時間内に作業を終わらせる」
ということもプロフェッショナルには必要ですからねぇ…。
 
とりあえず、家に帰って、3時間ほどかけて完成(´Д`;
bitmap.h

#pragma once

typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;

namespace bitmap
{
  // BITMAP FILE HEADER
  typedef struct tagBITMAPFILEHEADER {
    WORD    bfType;
    DWORD   bfSize;
    WORD    bfReserved1;
    WORD    bfReserved2;
    DWORD   bfOffBits;
  } BITMAPFILEHEADER;

  // BITMAP INFO HEADER
  typedef struct tagBITMAPINFOHEADER{
    DWORD      biSize;
    LONG       biWidth;
    LONG       biHeight;
    WORD       biPlanes;
    WORD       biBitCount;
    DWORD      biCompression;
    DWORD      biSizeImage;
    LONG       biXPelsPerMeter;
    LONG       biYPelsPerMeter;
    DWORD      biClrUsed;
    DWORD      biClrImportant;
  } BITMAPINFOHEADER;
}

main.cpp

#include <stdio.h>
#include <process.h>
#include <string.h>

#include "bitmap.h"

void main()
{
  bitmap::BITMAPFILEHEADER fHeader;
  bitmap::BITMAPINFOHEADER iHeader;

  // Read
  {
    FILE *fp = fopen("nyan.bmp", "rb");
    if(fp == NULL)
    {
      printf("Error");
      exit(-1);
    }

    fread(&fHeader.bfType, sizeof(fHeader.bfType), 1, fp);
    fread(&fHeader.bfSize, sizeof(fHeader.bfSize), 1, fp);
    fread(&fHeader.bfReserved1, sizeof(fHeader.bfReserved1), 1, fp);
    fread(&fHeader.bfReserved2, sizeof(fHeader.bfReserved2), 1, fp);
    fread(&fHeader.bfOffBits, sizeof(fHeader.bfOffBits), 1, fp);
		
    fread(&iHeader.biSize, sizeof(iHeader.biSize), 1, fp);
    fread(&iHeader.biWidth, sizeof(iHeader.biWidth), 1, fp);
    fread(&iHeader.biHeight, sizeof(iHeader.biHeight), 1, fp);
    fread(&iHeader.biPlanes, sizeof(iHeader.biPlanes), 1, fp);
    fread(&iHeader.biBitCount, sizeof(iHeader.biBitCount), 1, fp);
    fread(&iHeader.biCompression, sizeof(iHeader.biCompression), 1, fp);
    fread(&iHeader.biSizeImage, sizeof(iHeader.biSizeImage), 1, fp);
    fread(&iHeader.biXPelsPerMeter, sizeof(iHeader.biXPelsPerMeter), 1, fp);
    fread(&iHeader.biYPelsPerMeter, sizeof(iHeader.biYPelsPerMeter), 1, fp);
    fread(&iHeader.biClrUsed, sizeof(iHeader.biClrUsed), 1, fp);
    fread(&iHeader.biClrImportant, sizeof(iHeader.biClrImportant), 1, fp);

    fclose(fp);
  }

  // Write Header
  {
    FILE *fp = fopen("header.txt", "w");
    if(fp == NULL)
    {
      printf("Error");
      exit(-1);
    }

    fprintf(fp, "BITMAP FILE HEADER\n");
    fprintf(fp, "  bfType      = %c%c\n", ((char *)&fHeader.bfType)[0], ((char *)&fHeader.bfType)[1]);
    fprintf(fp, "  bfSize      = %d\n", fHeader.bfSize);
    fprintf(fp, "  bfReserved1 = %d\n", fHeader.bfReserved1);
    fprintf(fp, "  bfReserved2 = %d\n", fHeader.bfReserved2);
    fprintf(fp, "  bfOffBits   = %d\n", fHeader.bfOffBits);
    fprintf(fp, "BITMAP INFO HEADER\n");
    fprintf(fp, "  biSize          = %d\n", iHeader.biSize);
    fprintf(fp, "  biWidth         = %d\n", iHeader.biWidth);
    fprintf(fp, "  biHeight        = %d\n", iHeader.biHeight);
    fprintf(fp, "  biPlanes        = %d\n", iHeader.biPlanes);
    fprintf(fp, "  biBitCount      = %d\n", iHeader.biBitCount);
    fprintf(fp, "  biCompression   = %d\n", iHeader.biCompression);
    fprintf(fp, "  biSizeImage     = %d\n", iHeader.biSizeImage);
    fprintf(fp, "  biXPelsPerMeter = %d\n", iHeader.biXPelsPerMeter);
    fprintf(fp, "  biYPelsPerMeter = %d\n", iHeader.biYPelsPerMeter);
    fprintf(fp, "  biClrUsed       = %d\n", iHeader.biClrUsed);
    fprintf(fp, "  biClrImportant  = %d\n", iHeader.biClrImportant);
    fclose(fp);
  }

  return;
}

BITMAPFILEHEADER.bfTypeを出力するところで、
かなり悩んでしまいました、、。
(しょーもな、、)