Platform SDK: DirectX

デバイスに依存しないビットマップ

Windows そして DirectX は、ネイティブなグラフィックス ファイル フォーマットとして、デバイスに依存しないビットマップ (DIB) を使う。DIB とは、イメージのディメンジョン、それが使う色数、それらの色を記述する値、および個々のピクセルを記述するデータなどの情報を含むファイルである。なお DIB には、ファイル圧縮、有意カラー (すべての色が使用されない場合)、およびイメージの物理的ディメンジョン (印刷される場合) といった、あまり使われないパラメータもある。通常、DIB ファイルの拡張子は ".bmp" であるが、".dib" の場合もある。

[C++]

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]