ビットマップの読み込み基本的には、ファイルをバッファに読み込んだらBITMAPINFO
とビットマップバッファへのポインタを設定して終わりです。先頭からsizeof(BITMAPFILEHEADER) だけ後ろにBITMAPINFOの先頭が来て、ビットマップの先頭はBITMAPFILEHEADER のiOffBitsにファイルの先頭からビットマップまでのオフセットがはいっています。 fh=CreateFile(szFn,GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン
lpBuf=GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保
ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL);
lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER));
offset=*(LPDWORD)(lpBuf+10); // ビットマップまでのオフセット
lpBMP=lpBuf+offset; // ビットマップバッファのポインタ
CloseHandle(fh);
とすれば、BITMAPINFO とビットマップバッファのポインタ(つまりDIBそのもの)を作成できるわけです。今回のプログラムでは、16・24ビットの読み込みを想定しましたが、8ビットDIBについても同様の方法で読み込めるでしょう。カラーテーブルがあるので多少異なる部分もありますが、ビットマップまでのオフセットに注意すればそれほど問題はありません。 プログラム例今回のプログラムは、ビットマップファイルを選んで表示するものです。起動したら、ボタンをクリックしてファイルを選んでみてください。16ビット/フルカラーDIBを読み込む事が出来ます。 |