掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字フォントのビットマップの取得方法 (ID:66601)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ぴょぴょです。 GetGlyphOutline と GGO_BITMAP でいろいろとネット検索した結果です。 (1) その35 高速フォント表示(アンチエイリアス無しバージョン) http://marupeke296.com/DXG_No35_FontNoAntialiasing.html (2) GetGlyphOutline関数のフォント位置 http://marupeke296.com/WINT_GetGlyphOutline.html この2つのリンクを発見しました。 ほかにもたくさん見つかった。 >あと一番最後の引数である変換行列構造体は何ですか? いろいろと検索したら MAT2 とは 2×2 の行列のようです。 それから MAT2 構造体の中に FIXED 構造体がありました。 FIXED 構造体は整数部、小数部の情報で拡大、縮小、回転行列を入れるそうです。 簡単にまとめてみました。 ------------------------------ // 構造体 typedef struct _MAT2 { FIXED eM11; // 2×2行列の(1,1) FIXED eM12; // 2×2行列の(1,2) FIXED eM21; // 2×2行列の(2,1) FIXED eM22; // 2×2行列の(2,2) } MAT2, FAR *LPMAT2; // 構造体 typedef struct _FIXED { WORD fract; // 小数部(符号なし) short value; // 整数部(符号付き) } FIXED; 小数部は65536(=2^16)を分母にしたときの値を持っている。 普通の小数に直すには value + fract / 65536 と計算する。 MAT2には拡縮・回転行列を入れる 等倍{ 0, 1 }{ 0, 0 }{ 0, 0 }{ 0, 1 } 回転{ cos }{ -sin }{ sin }{ cos } doubleを65536倍してFIXEDにする。 MAT2 mat2 = { {0,+1}, {0,0}, {0,0}, {0,+1} }; // 回転なし MAT2 mat2 = { {0,-1}, {0,0}, {0,0}, {0,+1} }; // 左右反転 MAT2 mat2 = { {0,+1}, {0,0}, {0,0}, {0,-1} }; // 上下反転 MAT2 mat2 = { {0,-1}, {0,0}, {0,0}, {0,-1} }; // 180°回転 ------------------------------ ソースは次のようになりました。 MAT2 mat2 = { {0,1}, {0,0}, {0,0}, {0,1} }; // 回転なし GLYPHMETRICS gm; DWORD dwSize; LPBYTE lpByte; // サイズの取得 dwSize = GetGlyphOutline( hDC, 'A', GGO_BITMAP, &gm, 0, NULL, &mat2 ); // 動的確保 lpByte = (LPBYTE)GlobalAlloc( GPTR, dwSize ); dwSize = GetGlyphOutline( hDC, 'A', GGO_BITMAP, &gm, dwSize, (LPVOID)lpByte, &mat2 ); // 次のリンクを参考にビットマップを取り出す http://marupeke296.com/DXG_No35_FontNoAntialiasing.html // 描画位置 dx = x + gm.gmptGlyphOrigin.x; dy = y + tm.tmAscent - gm.gmptGlyphOrigin.y; ------------------------------ この質問は解決しました。 GetGlyphOutline 関数名を教えてくれた YuO さん、 GGO_GRAY8_BITMAP 定数を教えてくれた m さん。 有り難うございました。 解決。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.