user-0 提问: 小型嵌入式系统上的字库问题

回复:
user: user-1
content: 引用 9 楼 huabinsir 的回复:是这样的:  嵌入式产品上有软件，产品(包括软件)有可能卖给不同国家的客户，所以软件上的标签提示等要实现多国文字的显示. 参考7楼。

user: user-0
content: 是这样的:  嵌入式产品上有软件，产品(包括软件)有可能卖给不同国家的客户，所以软件上的标签提示等要实现多国文字的显示.

user: user-2
content: 引用 1 楼 turingo 的回复:1、沿用当年DOS下著名的UCDOS字库； 2、自己写工具从Windows或者是Linux的True Type字库提取字模； 3、自己写工具从开源的True Type字库提取字模。  [quote=引用 楼主 huabinsir 的回复:] 小型嵌入式系统上的字库问题  小型嵌入式系统上经常要根据用户来换字库，请问字库是如何生成的(得到的)[/quote]

user: user-3
content: 可以加一个字库芯片 ，如 gt21 系列

user: user-1
content: C源代码:12x12汉字点阵库(支持GBK)及其处理 http://download.csdn.net/detail/zhao4zhong1/2180241

user: user-4
content: 1、沿用当年DOS下著名的UCDOS字库； 2、自己写工具从Windows或者是Linux的True Type字库提取字模； 3、自己写工具从开源的True Type字库提取字模。  引用 楼主 huabinsir 的回复:小型嵌入式系统上的字库问题  小型嵌入式系统上经常要根据用户来换字库，请问字库是如何生成的(得到的)

user: user-5
content: 应该有商业字库

user: user-1
content: 引用 5 楼 huabinsir 的回复:我不是这个意思.  小系统上要实现多国语言，这里所说的字库是指 多国语言字库. 从Windows里面抓。仅供参考： #pragma comment(lib,"gdi32") #include <windows.h> #include <stdio.h>  int main() {     const DWORD uWidth = 18 + 17 * 256, uHeight = 18 + 17 * 128;      PBITMAPINFO pbmi = (PBITMAPINFO) LocalAlloc (LPTR, sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2);     pbmi->bmiHeader.biSize = sizeof (BITMAPINFOHEADER);     pbmi->bmiHeader.biWidth = uWidth;     pbmi->bmiHeader.biHeight = uHeight;     pbmi->bmiHeader.biPlanes = 1;     pbmi->bmiHeader.biBitCount = 1;     pbmi->bmiHeader.biSizeImage = ((uWidth + 31) & ~31) / 8 * uHeight;     pbmi->bmiColors[0].rgbBlue = 0;     pbmi->bmiColors[0].rgbGreen = 0;     pbmi->bmiColors[0].rgbRed = 0;     pbmi->bmiColors[1].rgbBlue = 255;     pbmi->bmiColors[1].rgbGreen = 255;     pbmi->bmiColors[1].rgbRed = 255;      HDC hDC = CreateCompatibleDC (0);     void * pvBits;     HBITMAP hBitmap = CreateDIBSection (hDC, pbmi, 0, &pvBits, NULL, 0);     SelectObject (hDC, hBitmap);     HFONT hFont = CreateFont (16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体"); //  HFONT hFont = CreateFont (16, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, 0, 0, 0, 0, "宋体");     SelectObject (hDC, hFont);     BitBlt (hDC, 0, 0, uWidth, uHeight, NULL, 0, 0, WHITENESS);      char c[4];     int i, j;     for (i = 128; i < 256; i++) {         sprintf (c, "%02X", i);         TextOut (hDC, 1, (i - 127) * 17 + 1, c, 2);     }     for (j = 0; j < 256; j++) {         sprintf (c, "%02X", j);         TextOut (hDC, (j + 1)* 17 + 1, 1, c, 2);     }     for (i = 128; i < 256; i++) {         for (j = 0; j < 256; j++) {             c[0] = (char) i;             c[1] = (char) j;             TextOut (hDC, (j + 1) * 17 + 1, (i - 127) * 17 + 1, c, 2);         }     }     for (i = 0; i < 130; i++) {         MoveToEx (hDC, 0, i * 17, NULL);         LineTo (hDC, uWidth, i * 17);     }     for (j = 0; j < 258; j++) {         MoveToEx (hDC, j * 17, 0, NULL);         LineTo (hDC, j * 17, uHeight);     }      BITMAPFILEHEADER bmfh;     bmfh.bfType = *(PWORD) "BM";     bmfh.bfReserved1 = 0;     bmfh.bfReserved2 = 0;     bmfh.bfOffBits = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2;     bmfh.bfSize = bmfh.bfOffBits + pbmi->bmiHeader.biSizeImage;      HANDLE hFile = CreateFile ("goal.bmp", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);     if (hFile != INVALID_HANDLE_VALUE) {         DWORD dwWritten;         WriteFile (hFile, &bmfh, sizeof (BITMAPFILEHEADER), &dwWritten, NULL);         WriteFile (hFile, pbmi, sizeof (BITMAPINFOHEADER) + sizeof (RGBQUAD) * 2, &dwWritten, NULL);         WriteFile (hFile, pvBits, pbmi->bmiHeader.biSizeImage, &dwWritten, NULL);          CloseHandle (hFile);     }      DeleteObject (hFont);     DeleteObject (hBitmap);     DeleteDC (hDC);     LocalFree (pbmi);      return 0; }  用PhotoShop查看这个代码生成的goal.bmp 提醒：侵犯字库版权问题请自己承担。

user: user-4
content: 用utf-8编码组织。  引用 5 楼 huabinsir 的回复:我不是这个意思.  小系统上要实现多国语言，这里所说的字库是指 多国语言字库.

user: user-0
content: 我不是这个意思.  小系统上要实现多国语言，这里所说的字库是指 多国语言字库.