[TTFフォント]TTFフォントのドットマトリクス情報を取得する

1772 ワード

TTFフォントのドットマトリクス情報を取得するかGetGlyphoutlineを使用するか
コードを見る
	CClientDC dc(this);
	HDC hDC = dc.GetSafeHdc();
	//    
	CFont font;
	VERIFY(font.CreateFont(32, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET,
		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "  "));
	CFont *pOldFont = dc.SelectObject(&font);
	//           
	MAT2 mat2;										
	memset(&mat2, 0, sizeof(mat2));
	mat2.eM11.value = 1;
	mat2.eM22.value = -1;			//     -1,      ,   BMP   

	GLYPHMETRICS metrics;		//         
	DWORD dwDataSize = 0;		//             
		
	//……

	//     GetGlyphOutline()           
	wchar_t nChar = L' ';
	::TextOut(dc.m_hDC, 0, 0, " ", 2);

	dwDataSize = ::GetGlyphOutlineW(dc.m_hDC, (UINT)nChar, GGO_BITMAP, &metrics, 0, NULL, &mat2);
	if ((dwDataSize != 0) && (dwDataSize != GDI_ERROR))
	{
		CMYBitmap myBitmap;
		myBitmap.Create(1, metrics.gmBlackBoxX, metrics.gmBlackBoxY, true);
		dwDataSize = ::GetGlyphOutlineW(dc.m_hDC, (UINT)nChar,GGO_BITMAP,&metrics, myBitmap.m_lBITMAPDATALen, myBitmap.m_pBITMAPDATA, &mat2);

		char chTemp[MAX_PATH];
		sprintf(chTemp, "E:\\ .bmp");
		CMYBitmapReader::SaveBitmap(chTemp, myBitmap);
	}

ドットマトリクスデータはBMP形式のデータであり、BMP関連の情報ヘッダを構築してDCに表示したり、BMPファイルに保存したりすることができる
GGO_BITMAP 1ビットマップ
他のビットマップは8ビットマップで保存できますが、色テーブルの構築に注意してください.
あれらのLEDの表示条、1つの字は16*16点があって、32*32点などがあります.
以前、プログラムを作って、文字を入力して、その文字を対応するドットマトリクスフォーマットに変換したことを覚えています.16*16または32*32のドットマトリクスについては、TTFフォントを用いるデータ抽出が最良ではない.抽出する文字、特に中国語のため、ドットマトリクスの範囲はあまり固定されていない(例えば、フォントの高さを32と設定するが、抽出したドットマトリクス情報は必ずしも32*32ではなく、29、31などがある).
16*16または32*32のドットマトリクスはDOSシステムのドットマトリクスファイルを探して抽出することができる.32*32より大きい場合はTTFで抽出することが考えられるが、文字の表示を揃えるための処理を行う.