GetGluphOutline関数による文字ビットマップの取得

// 例:MSゴシックの「あ」を取得します。

GLYPHMETRICS GM;
CONST MAT2 Mat = {{0,1},{0,0},{0,0},{0,1}};

// フォント情報
HFONT hFont = CreateFont(
   24,
   0,
   0,
   0,
   0,
   FALSE,
   FALSE,
   FALSE,
   SHIFTJIS_CHARSET,
   OUT_TT_ONLY_PRECIS,
   CLIP_DEFAULT_PRECIS,
   PROOF_QUALITY,
   FIXED_PITCH | FF_MODERN,
   "MS ゴシック"
);

// デバイスコンテキスト取得
// フォントを持たせないとGetGlyphOutline関数はエラーとなる
HDC hdc = GetDC(NULL);
HFONT oldFont = (HFONT)SelectObject(hdc, hFont);

// 文字コード取得
// 2バイト文字のコードは[文字コード]*256 + [先導コード]です
char *c = "あ";
UINT code = 0;
if(IsDBCSLeadByte(*c))
   code = (BYTE)c[0]<<8 | (BYTE)c[1];
else
   code = c[0];

// ビットマップ取得
DWORD size = GetGlyphOutline(hdc, code, GGO_GRAY4_BITMAP, &GM, 0, NULL, &Mat);
BYTE *ptr = new BYTE[size];
GetGlyphOutline(hdc, code, GGO_GRAY4_BITMAP, &GM, size, ptr, &Mat);

// オブジェクトの開放
SelectObject(hdc, oldFont);
DeleteObject(hFont);
ReleaseDC(NULL, hdc);

// 後片付け
delete[] ptr;