Platform SDK: DirectX |
Windows そして DirectX は、ネイティブなグラフィックス ファイル フォーマットとして、デバイスに依存しないビットマップ (DIB) を使う。DIB とは、イメージのディメンジョン、それが使う色数、それらの色を記述する値、および個々のピクセルを記述するデータなどの情報を含むファイルである。なお DIB には、ファイル圧縮、有意カラー (すべての色が使用されない場合)、およびイメージの物理的ディメンジョン (印刷される場合) といった、あまり使われないパラメータもある。通常、DIB ファイルの拡張子は ".bmp" であるが、".dib" の場合もある。
DIB は Windows プログラミングで広く普及しているため、プラットフォーム SDK には、DirectX で利用できる多くの関数が含まれている。次の例は、Win32® 関数と DirectX 関数を組み合わせて DirectX サーフェスに DIB をロードするアプリケーション定義の関数である。これは、プラットフォーム SDK の DirectX API 内の Ddutil.cpp ファイルに含まれている。
extern "C" IDirectDrawSurface * DDLoadBitmap(IDirectDraw *pdd, LPCSTR szBitmap, int dx, int dy) { HBITMAP hbm; BITMAP bm; DDSURFACEDESC ddsd; IDirectDrawSurface *pdds; // // ここが Win32 部分。 // ビットマップをリソースとしてロードする。 // 失敗すると、ファイルとしてロードする。 // hbm = (HBITMAP)LoadImage( GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx, dy, LR_CREATEDIBSECTION); if (hbm == NULL) hbm = (HBITMAP)LoadImage( NULL, szBitmap, IMAGE_BITMAP, dx, dy, LR_LOADFROMFILE|LR_CREATEDIBSECTION); if (hbm == NULL) return NULL; // // ビットマップのサイズを取得する。 // GetObject(hbm, sizeof(bm), &bm); // // ここで、DirectX 関数の呼び出しに戻る。 // このビットマップの DirectDrawSurface を作成する。 // ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = bm.bmWidth; ddsd.dwHeight = bm.bmHeight; if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK) return NULL; DDCopyBitmap(pdds, hbm, 0, 0, 0, 0); DeleteObject(hbm); return pdds; }
DIB ファイルの詳細については、プラットフォーム SDK を参照すること。
[C++,Visual Basic]