「計算数学1」の編集履歴(バックアップ)一覧に戻る

計算数学1 - (2013/01/21 (月) 15:33:30) のソース

#areaedit()
部分編集でプログラム本体みれるよ
表示については無視しといて

#include <stdio.h>
main() {
  FILE *fp2;
  char h[]={0x42,0x4d,0x46,0x42,0x4d,0x46,0x0,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x13,0xb,0x0,0x0,0x13,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
  int c;
  int i;
  fp2 = fopen("mypic.bmp","w");
  h[0x36+0]=0x0;
  h[0x36+1]=0xff;
  h[0x36+2]=0xff;
  h[0x36+3+0]=0xff;
  h[0x36+3+1]=0xff;
  h[0x36+3+2]=0xff;
  h[0x36+8+0]=0xff;
  h[0x36+8+1]=0xff;
  h[0x36+8+2]=0xff;
  h[0x36+8+3+0]=0xff;
  h[0x36+8+3+1]=0xff;
  h[0x36+8+3+2]=0xff;  h[0x36+8+3++1]=0xff;
  for (i=0; i<70; i++) fputc(h[i],fp2);  h[0x36+8+3++1]=0xff;
  fclose(fp2);
}

/*
BMP format     :   http://ja.wikipedia.org/wiki/Windows_bitmap
*/

#areaedit(end)
#areaedit()
0x42,0x4d,0x46,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x13,0xb,0x0,0x0,0x13,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0

以上が、2×2画像ですべてが黒の画像の実際のデータ。
以下解説

※サイズなどのデータは右から左に読む

ファイルヘッダ:BITMAPFILEHEADER 14byte
0x42,0x4d, ファイルタイプ 常にBM(0x42,0x4d)(マジックナンバー)
0x46,0x0,0x0,0x0, ファイルサイズ ビットマップファイルのサイズを格納する(単位はバイト)。(ここを編集)
0x0,0x0, 予約領域1 常に0
0x0,0x0, 予約領域2 常に0
0x36,0x0,0x0,0x0, オフセット ファイルヘッダの先頭アドレスからビットマップデータの先頭アドレスまでのオフセット(単位はバイト)。

情報ヘッダ:BITMAPINFOHEADER 40byte
0x28,0x0,0x0,0x0, ヘッダサイズ 40
0x2,0x0,0x0,0x0, ビットマップの横幅 単位はピクセル(ここを編集)
0x2,0x0,0x0,0x0, ビットマップの縦幅 単位はピクセル(ここを編集)
0x1,0x0, プレーン数 常に1
0x18,0x0, 1ピクセルあたりのビット数 0,1,4,8,16,24,32 通常24ビットなので0x18
0x0,0x0,0x0,0x0, 圧縮形式 0,1,2,3,4,5 無圧縮は0
0x10,0x0,0x0,0x0, 画像データサイズ 単位はバイト(ここを編集)
0x13,0xb,0x0,0x0, 水平方向の解像度 単位はピクセル/m
0x13,0xb,0x0,0x0, 垂直方向の解像度 単位はピクセル/m
0x0,0x0,0x0,0x0, 使用する色数 ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0,0x0,0x0,0x0, 重要な色数 ビットマップを表示するために必要なカラーインデックスの数。

画像データ
※ここから
0x0,0x0,0x0, (1,1)BGR(右からRGB)
0x0,0x0,0x0, (2,1)BGR
0x0,0x0, ゴミ
※ここまででバイト数を4の倍数にする。以降同様。
0x0,0x0,0x0, (1,2)BGR
0x0,0x0,0x0, (2,2)BGR
0x0,0x0 ゴミ
#areaedit(end)
#areaedit()
#areaedit(end)
#areaedit()
#areaedit(end)
#areaedit()
#areaedit(end)
#areaedit()
#areaedit(end)
#areaedit()
#areaedit(end)