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を出力するところで、
かなり悩んでしまいました、、。
(しょーもな、、)