精华内容
下载资源
问答
  • GBK点阵字库

    2018-09-21 21:54:18
    GBK点阵字库,宋体,24乘24,111文件是加粗的,333是不加粗的
  • GBK点阵字库DZK文件

    热门讨论 2014-09-06 09:45:56
    包含了所有GBK字库的16*16点阵字库,其中DZK文件可以用UE等软件打开并编辑。
  • 能给我发一下GBK点阵字库DZK文件吗?944892440,可以花钱买
    能给我发一下GBK点阵字库DZK文件吗?944892440,可以花钱买
    展开全文
  • GBK点阵字库C文件

    2014-09-06 09:51:16
    这是GBK汉字库的16*16字模文件,后缀为.c,最好不要使用记事本打开,部分内容会不可见
  • 文件拓展名为fon,系统是打不开的,可以使用WinHex观察存储信息 可用于SD卡中字库的存储
  • GBK点阵字库制作工具说明及下载

    千次阅读 2016-01-05 23:18:32
    一、界面说明 1、字模生成 1)选择字体:选择系统矢量字体 宽(像素):字模的宽度(即图片宽度) 高(像素):字模的高度即(即图片高度) 建议按1:1的像素比例设置 ...下一个:切换预览下一个GBK字符

    工具下载地址

    http://download.csdn.net/detail/yangyunchenrt/9391798

    一、界面说明

    1、字模生成
    这里写图片描述

    1)选择字体:选择系统矢量字体
    宽(像素):字模的宽度(即图片宽度)
    高(像素):字模的高度即(即图片高度)

    2)预览功能:
    输 入:需要预览的字符(可设置为字符或者GBK编码两种输入形式)
    上一个:切换预览上一个GBK字符
    预 览:预览当前输入框指定的字符,用于查看字体是否美观等
    下一个:切换预览下一个GBK字符

    3)输出设置:
    ⑴ 扫描方向:
    横向扫描:字体扫描时,以行为单位进行扫描
    竖向扫描:字体扫描时,以列为单位进行扫描
    ⑵ 扫描顺序(存储顺序):
    字模文件存储时,以8个像素点为单位,每一个像素点占据1位,即一个字节可存储8个像素点的信息,如果当前行(列)扫描结束时不足8位,则后续位填充0。
    正序扫描:正向存储像素点信息,即第1个像素点存储在当前字节第0位,第2个像素点存储在当前字节第2位,以此类推。
    倒序扫描:反向存储像素点信息,即第1个像素点存储在当前字节第7位,第2个像素点存储在当前字节第6位,以此类推。

    4)输出说明:
    文件输出格式为二进制文件(.bin),分别生成.bin,*w.bin两个文件,.bin文件包含具体字体像素信息,*w.bin文件则为对应的字体宽度说明文件,每一个字符占据一个字节,如12x12大小的字体,则*w.bin文件中存储的数据为:0x0C,0x0C…
    说明:*w.bin文件并非是必要文件,用户可自行决定是否需要该文件,不需要时删除即可

    2、字模查看
    该功能用于用户生成字体文件后,查看字体是否符合需要
    这里写图片描述
    选择文件:选择相应的字模文件,即上文所列的*.bin文件
    宽(像素):字模文件中的字符宽度
    高(像素):字模文件中的字符高度
    注意:请必须按照生成时的参数填入,否则查看时会显示异常
    输入:参照【字模生成】项
    扫描方向:请务必按照生成时的参数勾选,说明请参照【字模生成】项
    扫描顺序:请务必按照生成时的参数勾选,说明请参照【字模生成】项

    二、使用说明

    GBK 对 GB2312 进行了扩展,具体编码规则请用户自行查阅资料

    使用本程序生成的点阵字库时,定位方法如下:
    第一个字节减去 0x81,第二个字节减去0x40,则是正确的区位,每个区的大小要根据每个字所占用的字节×192(GBK编码中,每个区的字符数实际只有190个,即0xXX7F、0xXXFF留空,但我为了偷懒^__^,因此把这两个字符也写进文件中,因此实际就需要×192个)

    以下是C/C++风格的定位代码,ch为unsigned short(16位无符号整形数)类型,计算出字符在表中的偏移后,再乘以每个字所占用的字节就可以得出在字库文件中的偏移

    #define  FONT_GBK_OFS(ch)  (((ch>>8)-0x81)*192 + ((ch&0xff)-0x40))

    三、版权及作者说明
    该软件由作者独立制作,欢迎有需要的人士免费使用,如转载、传播请保留本文,谢谢!
    该软件为作者业余时间制作,疏漏之处可能难免,对于12x12、16x16、24x24(横向、倒序扫描)作者已经进行了验证并可正常使用,用户使用过程中如发现其他问题,可通过邮箱联系:260570973@qq.com

    展开全文
  • 这个是16点阵的gbk点阵字库,不是gb2312 ,很齐全的繁体字都有
  • gbk(16*16)点阵字库文件

    热门讨论 2011-06-12 16:46:03
    16*16的gbk点阵字库文件,包括一个二进制文件和一个全gbk字符的文本。
  • GBK点阵显示字库的制作和使用

    千次阅读 2017-01-13 09:50:11
    GBK编码共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。以两个字节表示一个汉字,编码范围是0x8140~0xfefe,兼容GB2318,并覆盖了unicode中的所有汉字。Win7记事本默认以GBK保存汉字。 ...

    转自:http://blog.csdn.net/exbob/article/details/6539643

    GBK编码共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。以两个字节表示一个汉字,编码范围是0x8140~0xfefe,兼容GB2318,并覆盖了unicode中的所有汉字。Win7记事本默认以GBK保存汉字。

    关于GBK的详细信息:http://baike.baidu.com/view/25421.htm

     

    开发环境

    Win7、Eclipse、MinGW

     

    1.生成GBK全字符文件

    运行下面这段代码,生成GBK全字符文件gbk.txt,编码范围0x8140~0xfefe

    [cpp] view plain copy
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3.   
    4. int main(void)  
    5. {  
    6.     FILE *fp=0;  
    7.     char ch=0;  
    8.     unsigned short int start=0x8140;  
    9.     unsigned char part1=0;  
    10.     unsigned char part2=0;  
    11.   
    12.     fp=fopen("gbk.txt","wb");  
    13.     if(fp==NULL)  
    14.     {  
    15.         perror("Cann't open gbk.txt");  
    16.         return -1;  
    17.     }  
    18.     else  
    19.         printf("Creat file gbk.txt/n");  
    20.     while(start < 0xfeff)  
    21.     {  
    22.         part1=start>>8;  
    23.         part2=start;  
    24.         fputc(part1,fp);  
    25.         fputc(part2,fp);  
    26.         start++;  
    27.     }  
    28.     fclose(fp);  
    29.     printf("success!");  
    30.   
    31.     return 0;  
    32. }  

    运行后,用记事本打开gbk.txt文件,可以看到其中的字符。

     

    2.生成字模二进制文件

    用“牧码字模”软件打开gbk.txt文件,选择字体为宋体,字重为1,点阵大小16*16,对齐方式为左下,取模方式为“纵向取模、高位在下”。输出格式选择bin。然后点击输出,会生成一个temp.bin文件,改名为gbk.bin。

    gbk.bin文件就是GBK编码字符的点阵字库文件,每32个字节可以绘制一个字符,例如第一个字符‘丂’的显示如下:

    取模的数据为:

    0x02, 0x02, 0x02, 0xc2, 0xb2, 0x8e, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x40, 0x3f, 0x00, 0x00, 0x00, 0x00, 

     

    3.使用字库文件

    gbk.bin文件中按GBK编码的大小排列,每32个字节可以显示一个字符,假设一个字符的GBK编码为NUM,那么它的点阵数据第一个字节的位置就是:

    (NUM-0x8140)*32

    从这个字节开始,读取32个字节,将其按按照取模方式显示即可。

    例如:用Linux的终端模拟点阵屏幕,每个字符位置就是一个点,程序如下:

    [cpp] view plain copy
    1. #include <stdio.h>  
    2. #include <unistd.h>  
    3. #include <curses.h>  
    4.   
    5. #define START 0x8140  
    6. #define DATANUM 0x20  
    7.   
    8. int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y);  
    9.   
    10. int main(void)  
    11. {  
    12.     FILE * fp=0;  
    13.     unsigned short int testch = 0xb0ae;  //汉字'爱‘的gbk码  
    14.   
    15.     fp = fopen("gbk.bin","rb");  
    16.   
    17.     initscr();  
    18.   
    19.     displaychar(fp,testch,'*',0,0);  
    20.   
    21.     refresh();  
    22.   
    23.     while(1);  
    24.     endwin();  
    25.     fclose(fp);  
    26.     return 0;  
    27. }  
    28.   
    29. /* 
    30.  * fp指向点阵字库二进制文件 
    31.  * 以点阵方式显示一个GBK字符 
    32.  * dispch是要显示的字符,fillch是填充点阵的字符 
    33.  * start_x,start_y是显示的起始坐标 
    34.  */  
    35. int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y)  
    36. {  
    37.     char x=start_x;  
    38.     char y=start_y;  
    39.     unsigned int location=(dispch-START)*DATANUM;  
    40.   
    41.     int i=0;  
    42.     int j=0;  
    43.     char buf=0;  
    44.   
    45.     fseek(fp,location,SEEK_SET);  
    46.   
    47.     for(i=0;i<DATANUM;i++)  
    48.     {  
    49.         buf=fgetc(fp);  
    50.   
    51.         //显示一个字节  
    52.         for(j=0;j<8;j++)  
    53.         {  
    54.             move(y+j,x);  
    55.             if( buf & (0x01<<j) )  
    56.             {  
    57.                 addch(fillch);  
    58.             }  
    59.         }  
    60.   
    61.         if(x == (start_x+15))  
    62.         {  
    63.             x=start_x;  
    64.             y=start_y+8;  
    65.         }  
    66.         else  
    67.             x++;  
    68.     }  
    69.     return 0;  
    70.   
    71. }  

    显示效果如下:

    下载:

    字库文件:http://download.csdn.net/source/3359198

    字模提取软件:http://download.csdn.net/source/3358791

    展开全文
  • GBK 16 X 16 点阵字库文件 是自己使用工具转换出来的,未全部检查, 仅做参考,请慎重考虑使用。
  • 16点阵GBK字库

    2013-05-04 13:14:44
    自己根据其他文档整理出来的GBK字库,16点阵,粗体,可用于液晶屏、LED屏的显示。
  • 大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字。 GBK的意思大概是“国家标准汉字扩展字符集”吧,记不清了。但它的确是个好东东,比GB2312...

    大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字。

    GBK的意思大概是“国家标准汉字扩展字符集”吧,记不清了。但它的确是个好东东,比GB2312、BIG5什么的强多了。因为它包括GB2312、GBK的所有字符而且还补充了很多字,另外,还包括日文、朝鲜文以及大量的符号字符。

    我在UCDOS for win版本里面找到了GBK的点阵字库(HZK12.GBK、HZK14.GBK、HZK16.GBK)。分析了一下,知道了结构。这里是我写的一个演示 程序,程序编译需要有sdl库。遵循“惯例”,按F4切换全屏/窗口状态,Esc退出。程序把标准输出和标准错误重定向到"stdout.txt"和 "stderr.txt"中。


    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>

    #include "sdl.h"
    #include "SDL_image.h"
    #include "sfont.h"

    //---------------------------------------------------------------------------
    #define STDOUT_FILE "stdout.txt"
    #define STDERR_FILE "stderr.txt"

    SDL_Surface *screen;
    Uint32 fps;
    Uint32 AppStartTime = 0;
    Uint32 frame_count = 0;
    static Uint32 frames;

    SDL_Event event;
    SDL_Surface * SetMode( int Width, int Height, int BPP, int Flags );
    SDL_Surface * LoadBMP( char * filename );
    void MainLoops( int ( * EventFunc)( ), void ( * DrawFunc )( ), int DelayTime );
    void Blt( SDL_Surface * image, int x, int y );
    void TileBlt( SDL_Surface * image, int x, int y );
    void SetTransparentColor( SDL_Surface * sprite, int R, int G, int B );
    void IoRedirect( );
    void cleanup_output( );
    void initfps();

    //---------------------------------------------------------------------------
    Uint8 HZK12[574560];
    Uint8 HZK14[670320];
    Uint8 HZK16[766080];
    BOOL HZ_Init();
    BOOL HZ_TextOut( SDL_Surface * image, int x, int y, int width, int space, unsigned char * str );
    //---------------------------------------------------------------------------

    int ProcessEvent();
    void DrawFrame();

    SDL_Surface * bg, * font;
    int ix, iy, jx, jy;
    int Width = 640;
    int Height = 480;
    int bpp = 16;
    int ScreenMode = 0;

    WINAPI WinMain(HINSTANCE hInstPre, HINSTANCE hInstance, LPSTR cmd, int xxx )
    {
    char TimeString[256];
    time_t timer;
    struct tm *tblock;

    HZ_Init();
    IoRedirect( );
    frames = 0;
    timer = time(NULL);
    tblock = localtime(&timer);
    strftime( TimeString, 256, "Time=%Z: %Y-%m-%d %a %H:%M:%S", tblock );
    printf( "%s\\n", TimeString );

    SetMode( Width, Height, bpp, SDL_SWSURFACE|ScreenMode);
    SDL_ShowCursor(0);
    SDL_WM_SetCaption("demo", "demo");

    bg = IMG_Load( ".\\\\2k_bg.gif" );
    font = IMG_Load( ".\\\\small.gif" );

    InitFont(font);
    SDL_SetAlpha(font, SDL_SRCALPHA|SDL_RLEACCEL, 127);

    ix=iy=0;
    jx=jy= Height>>1;
    srand((Uint32)timer);

    MainLoops(ProcessEvent, DrawFrame, 0);

    printf("ScreenMode=%d*%d*%d\\nFPS=%u", Width, Height, bpp, fps);

    return 0;
    }

    int ProcessEvent()
    {
    Uint8 *keystate;

    keystate = SDL_GetKeyState( NULL );
    if ( ( keystate[SDLK_ESCAPE] ) || ( keystate[SDLK_q] ) )
    return 0;
    if ( keystate[SDLK_F4] )
    {
    if ( ScreenMode )
    ScreenMode = 0;
    else
    ScreenMode = SDL_FULLSCREEN;

    SetMode( Width, Height, bpp, SDL_SWSURFACE|ScreenMode );
    initfps( );
    }

    return 1;
    }

    void DrawFrame( )
    {
    char tmp[256];
    int step = 4;

    //
    sprintf( tmp, "TotalFrame=%u", frames );

    TileBlt( bg, 0, 0 );

    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 4 );
    PutString( screen, ix % Width - 6, iy % Height - 6, tmp );
    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 8 );
    PutString( screen, ix % Width - 5, iy % Height - 5, tmp );
    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 16 );
    PutString( screen, ix % Width - 4, iy % Height - 4, tmp );
    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 32 );
    PutString( screen, ix % Width - 3, iy % Height - 3, tmp );
    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 64 );
    PutString( screen, ix % Width - 2, iy % Height - 2, tmp );
    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 128 );
    PutString( screen, ix % Width - 1, iy % Height - 1, tmp );
    SDL_SetAlpha( font, SDL_SRCALPHA|SDL_RLEACCEL, 192 );
    PutString( screen, ix % Width, iy % Height, tmp );

    PutString( screen, ix % Width, iy % Height + 40, tmp );

    if ( rand( ) % 400 < 2 )
    {
    jx = rand( ) % ( Width - 10 );
    jy = rand( ) % ( Height - 10 );
    }

    sprintf( tmp, "FPS=%d", fps );
    PutString( screen, 7, 7, tmp );
    //聞波,2000 
    HZ_TextOut( screen, 10, 300, 16, 0, "十步殺一人,千里不留行");
    HZ_TextOut( screen, 10, 318, 14, 0, "十步殺一人,千里不留行" );
    HZ_TextOut( screen, 10, 334, 12, 0, "十步殺一人,千里不留行" );
    ix += step;
    iy += step;
    }
    //---------------------------------------------------------------------------

    //---------------------------------------------------------------------------
    SDL_Surface * SetMode( int Width, int Height, int BPP, int Flags )
    {
    /* Initialize the SDL library */
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
    fprintf(stderr, "Couldn't initialize SDL: %s\\n", SDL_GetError( ) );
    return NULL;
    }

    /* Clean up on exit */
    atexit(SDL_Quit);

    /* Initialize the display in a 640x480 8-bit palettized mode */
    screen = SDL_SetVideoMode( Width, Height, BPP, Flags );
    if ( screen == NULL )
    {
    fprintf( stderr, "Couldn't set %dx%dx%d video mode: %s\\n", Width, Height, BPP, SDL_GetError( ) );
    }

    return screen;
    }
    //---------------------------------------------------------------------------

    void initfps( )
    {
    AppStartTime = SDL_GetTicks();
    frame_count = 0;
    }
    //---------------------------------------------------------------------------

    void MainLoops( int ( * EventFunc)( ), void ( * DrawFunc)( ), int DelayTime )
    {
    if ( EventFunc&&DrawFunc )
    {
    memset( &event, 0, sizeof( SDL_Event ) );
    initfps( );

    while( EventFunc( ) )
    {
    SDL_PollEvent(&event);
    if ( event.type == SDL_ACTIVEEVENT )
    {
    if ( ( ( event.active.state & SDL_APPACTIVE ) == FALSE ) ||
    ( event.active.gain == FALSE ) )
    initfps( );
    }
    SDL_PumpEvents();
    DrawFunc( );
    SDL_UpdateRect(screen,0, 0, 0, 0);
    frame_count ++;
    frames ++;
    fps = frame_count * 1000 / ( SDL_GetTicks( ) - AppStartTime );
    if ( DelayTime ) SDL_Delay( DelayTime );
    }
    }
    }
    //---------------------------------------------------------------------------

    SDL_Surface * LoadBMP( char * filename )
    {
    SDL_Surface * imagebmp, * image;

    imagebmp = SDL_LoadBMP( filename );
    if ( imagebmp == NULL )
    return NULL;

    if ( imagebmp->format->palette != NULL )
    {
    SDL_SetColors( screen, imagebmp->format->palette->colors, 0, imagebmp->format->palette->ncolors );
    }

    /* Convert the image to the video format (maps colors) */
    image = SDL_DisplayFormat( imagebmp );
    SDL_FreeSurface( imagebmp );

    return image;
    }
    //---------------------------------------------------------------------------

    void Blt( SDL_Surface * image, int x, int y )
    {
    int Row, Col, r, c, shiftx, shifty;
    SDL_Rect dest, src;

    /* out of screen */
    if ( ( x > screen->w ) || ( y > screen->h ) ||
    ( x + image->w < 1 ) || ( y + image->h < 1 ) )
    return;

    src.x = 0;
    src.y = 0;
    src.w = image->w;
    src.h = image->h;
    dest.x = x;
    dest.y = y;
    dest.w = src.w;
    if ( y < 0 )
    {
    src.y = 0 - y;
    src.h = image->h + src.y;
    dest.y = 0;
    }
    dest.h = src.h;

    SDL_BlitSurface( image, &src, screen, &dest );
    }
    //---------------------------------------------------------------------------

    void TileBlt( SDL_Surface * image, int x, int y )
    {
    int Row, Col, r, c, shiftx, shifty;
    SDL_Rect dest, src;

    shiftx = x % image->w;
    shifty = y % image->h;

    if ( shiftx >0 ) shiftx -= image->w;
    if ( shifty >0 ) shifty -= image->h;

    Row = screen->h / image->h + 2;
    Col = screen->w / image->w + 2;

    dest.x = 0;
    dest.y = 0;
    dest.w = image->w;
    dest.h = image->h;
    src.x = 0;
    src.y = 0;
    src.w = image->w;
    src.h = image->h;

    for ( r = 0; r < Row; r ++ )
    {
    if ( r )
    {
    src.y = 0;
    src.h = image->h;
    dest.h = image->h;
    dest.y = image->h * r + shifty;
    }
    else
    { /* first line ? */
    src.y = 0 - shifty;
    src.h = image->h;
    dest.h = image->h + shifty;
    dest.y = 0;
    }

    for ( c = 0; c < Col; c ++ )
    {
    dest.x = image->w * c + shiftx;
    SDL_BlitSurface( image, &src, screen, &dest );
    }
    }
    }
    //---------------------------------------------------------------------------

    void SetTransparentColor( SDL_Surface * sprite, int R, int G, int B )
    {
    SDL_SetColorKey( sprite, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB( sprite->format, R, G, B ) );
    }
    //---------------------------------------------------------------------------

    /* Remove the output files if there was no output written */
    static void cleanup_output( )
    {
    FILE *file;
    int empty;

    /* Flush the output in case anything is queued */
    fclose(stdout);
    fclose(stderr);

    /* See if the files have any output in them */
    file = fopen(STDOUT_FILE, "rb");
    if ( file )
    {
    empty = (fgetc(file) == EOF) ? 1 : 0;
    fclose(file);
    if ( empty )
    remove(STDOUT_FILE);
    }
    file = fopen(STDERR_FILE, "rb");
    if ( file )
    {
    empty = (fgetc(file) == EOF) ? 1 : 0;
    fclose(file);
    if ( empty )
    remove(STDERR_FILE);
    }
    }
    //---------------------------------------------------------------------------

    void IoRedirect( )
    {
    FILE *newfp;

    /* Redirect standard standard output */
    newfp = freopen(STDOUT_FILE, "w", stdout);
    if ( newfp == NULL )
    { /* This happens on NT */
    #if !defined(stdout)
    stdout = fopen(STDOUT_FILE, "w");
    #else
    newfp = fopen(STDOUT_FILE, "w");
    if ( newfp ) *stdout = *newfp;
    #endif
    }

    /* Redirect standard standard error */
    newfp = freopen(STDERR_FILE, "w", stderr);
    if ( newfp == NULL )
    { /* This happens on NT */
    #if !defined(stderr)
    stderr = fopen(STDERR_FILE, "w");
    #else
    newfp = fopen(STDERR_FILE, "w");
    if ( newfp ) *stderr = *newfp;
    #endif
    }

    setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Line buffered */
    setbuf(stderr, NULL); /* No buffering */
    atexit(cleanup_output);
    }
    //---------------------------------------------------------------------------

    BOOL HZ_Init()
    {
    FILE * file;

    file = fopen( ".\\\\HZK16.GBK", "rb" );
    fread( HZK16, 32, 0x5d84, file );
    fclose( file );
    file = fopen( ".\\\\HZK14.GBK", "rb" );
    fread( HZK14, 28, 0x5d84, file );
    fclose( file );
    file = fopen( ".\\\\HZK12.GBK", "rb" );
    fread( HZK12, 24, 0x5d84, file );
    fclose( file );

    return TRUE;
    }
    //---------------------------------------------------------------------------

    BOOL HZ_TextOut( SDL_Surface * image, int x, int y, int width, int space, unsigned char * str )
    {
    Uint8 * bufptr;
    Uint8 * HZK;
    Uint16 Bits[16];
    int i,j,k, m, offset = 0;
    unsigned char q;
    unsigned char w;

    switch ( width )
    {
    case 12:
    HZK = HZK12;
    break;
    case 14:
    HZK = HZK14;
    break;
    case 16:
    HZK = HZK16;
    break;
    default:
    return FALSE;
    }
    bufptr = (unsigned char*)image->pixels;

    m = strlen( str );
    for ( k = 0; k < m; k +=2 )
    {
    Uint32 X, Y, Z, M;
    q = str[k];
    w = str[k+1];

    if ( w > 0xa0 )
    {
    M = 0x5e;
    Y = w - 0xa1;
    if ( q > 0xa0 )
    {
    X = q - 0xa1;
    Z = 0;
    }
    else
    {
    X = q - 0x81;
    Z = 0x2284;
    }
    }
    else
    {
    M = 0x60;
    if ( w > 0x7f ) Y = w - 0x41;
    else Y = w - 0x40;

    if ( q > 0xa0 )
    {
    X = q - 0xa1;
    Z = 0x3a44;
    }
    else
    {
    X = q - 0x81;
    Z = 0x2e44;
    }
    }
    memcpy( Bits, HZK + ( X * M + Y + Z ) * width * 2, width * 2 );

    for (i = 0; i < width; i ++) // row
    {
    Uint16 line;

    line = Bits[i];
    line = (line >> 8 ) + (line << 8);

    for (j = 0; j < 16 ; j ++) //col
    {
    int index;
    int mask = 1;

    index = offset + x + 16 - j - 1 + ( y + i ) * image->pitch / image->format->BytesPerPixel;
    mask <<= j;
    if (mask & line)
    {
    bufptr[index * 2] = 0xff;
    bufptr[index * 2 + 1] = 0xff;
    }
    }
    }
    offset += width + space;
    }
    return TRUE;
    }

    http://www.rosoo.net/a/201003/8785.html

    展开全文
  • gbk点阵字库文件,unicode转换为gbk的文件
  • 点阵字库hzk

    2018-04-26 15:16:32
    gbk汉字库,可以用来生成汉字点阵,主要包括HZK 12,HZK16,HZK64,适用于各种大小点阵
  • 汉字20点阵宋体、黑体GBK字库,可用于LCD、LED等显示,或点阵打印。
  • 在SDL中显示GBK点阵汉字(转)[@more@]大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字。 GBK的意思大概是“国家标准汉字扩展字符集”吧,记不...
  • 点阵字库(字模)生成器是一款可以生成48×48以下的测试字库,16×16的GB2312...可以生成多个国家的点阵字库软件,包括: UNICODE 874 泰文 932 日文(Shift-JIS) 936 中文(PRC GBK) 936 中文(PRC GB2312) 949 韩文(HANGUL

空空如也

空空如也

1 2 3 4 5
收藏数 96
精华内容 38
关键字:

gbk点阵字库