GB2312引进和使用的字体
一个:先上图看到的结果,下面的屏幕截图android在测试的结果“SD卡测试”、、“GPS测试”和其他字符24x24字体进来。
二:
1)简单介绍
     《信息交换用汉字编码字符集》是由中国国家标准总局1980年公布,1981年5月1日開始实施的一套国家标准。标准号是GB
 2312—1980
GBK与GB 2312—1980国家标准所相应的内码标准兼容,同一时候在字汇一级支持ISO/IEC10646—1和GB 13000—1的所有中、日、韩(CJK)汉字,共计20902字。
这样的表示方式也称为区位码。
      
三:代码实现
当中用到的hkk.h库文件我已经上传的CSDN(http://download.csdn.net/detail/funbox/7650167)上面,实用到的朋友能够下载使用
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <linux/android_pmem.h>
#include "hkk24.h"
typedef unsigned long  U32;
typedef unsigned short U16;
typedef unsigned char  U8;
U8* string_def[] = {{" SD卡測试"},{" Camera測试"},
                    {"音频測试"},{"重力传感器"},
                    {" LCD測试" },{" GPS測试"},
                    {"背光測试"},{"触屏測试"},
                    {"按键測试"},{" OTG測试"},
                    {"蓝牙測试"},{" WIFI測试"},
                    {" HDMI測试"},{" NFC測试"},
                    {"指南针測试"},{"陀螺仪測试"},
              };
/*
===============================================================================
 Function : PutPixel
 功能     :画单个像素(一个点)
 入口參数 :U16 x:点的X坐标
	   U16 y:点的y坐标
	   U16 c:点的颜色
===============================================================================
*/
void PutPixel(U16 x, U16 y)
{
     set_pixel(x, y, 0, 0, 255, 0);
}
/*
===============================================================================
 Function : WriteHZ24
 功能	  :画中文24点阵汉字
 入口參数 :U16 x:汉字X坐标
 	   U16 y:汉字Y坐标
 	   U16 c:汉字颜色
 	   U16 bk_c:汉字背景颜色
 	   U32 addr:汉字所在地址
===============================================================================
*/
void WriteHZ24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr)
{
	U16 i16, j16, zg;
	U32 mask, buf;
	U8 const *pZK;
	  
	pZK = &HZ24KFont[addr];
	for(i16=0; i16<24; i16++)
	{
		buf= pZK[3*i16]<<16 | pZK[3*i16 + 1]<<8 | pZK[3*i16 + 2];
		mask = 0x800000;
		for(j16=0; j16<24; j16++)
		{
			if(buf & mask)
			{
				PutPixel(x+j16,y+i16);
			}
			else
			{
				 //*addr_ptr = bk_c;  //????
?
?
??
????
?
?
			}
			mask = mask >> 1;
		}
	}
}
/*
===============================================================================
 Function : WriteEN24
 功能	  :画英文24*16点阵汉字
 入口參数 :U16 x:汉字X坐标
 	   U16 y:汉字Y坐标
   	   U16 c:汉字颜色
 	   U16 bk_c:汉字背景颜色
 	   U32 addr:英文所在地址
===============================================================================
*/
void WriteEN24(U16 x, U16 y, U16 c, U16 bk_c, U32 addr)
{
	U16  i16, j16, zg;
	U32  mask, buf;
	U8 const *pZK;
	  
	pZK = &ENG24Font[addr];
	for(i16=0; i16<24; i16++)
	{
		  buf= pZK[2*i16]<<8 | pZK[2*i16 + 1];
		  mask = 0x8000;
		  for(j16=0; j16<24; j16++)
		  {
			  if(buf & mask) {
				  PutPixel(x+j16,y+i16);
			  } else {
				 //*addr_ptr = bk_c;
			  }
		  }
                  mask = mask >> 1;
	}
}
/*
===============================================================================
 Function : Lcd_Put24
 功能     :画24点阵的文字
 入口參数 :U16 x:文字X坐标
 	   U16 y:文字Y坐标
 	   U16 c:文字颜色
 	   U16 bk_c:文字背景颜色
 	   U8* string:文字内容
===============================================================================
*/
void Lcd_Put24(U16 x, U16 y, U16 c, U16 bk_c, U8* string)
{
  U8  i8;
  U16 Block, Pos;
  U16  nm;
  U32 addr;
  U8 size;
   //printf("Lcd_Put24 string = %s\n",string);
   size = strlen(string);
    for(i8 = 0;i8 < size;i8++)
    {
        printf("string[%d]:%x\n",i8,string[i8]);
    }
    for(i8=0; i8<size; i8++)
    {
      if(string[i8]==0) 
         break;
      if(string[i8]>128)
      {
          nm = 0; 
          Block = string[i8];
          Pos   = string[++i8];
          nm = Block<<8|Pos;
          //nm = 0xb0a1;
          printf("nm = 0x%x\n",nm);
	  //addr = (((nm>>8) - 0x0b0 )*94 + ((nm&0x00ff) - 0xa1  )+1410)*72;
          addr = (((nm>>8) - 0xa1 )*94 + ((nm&0x00ff) - 0xa1))*72;
	  WriteHZ24(x+i8*13, y, c, bk_c, addr);
      } else {
	    addr = (2*94+(string[i8]-0x21))*72;
	    WriteHZ24(x+i8*15, y,c,bk_c,addr);
	    //addr = (string[i8]-0x20)*48;
	    //WriteEN24(x+i8*13, y,c,bk_c,addr);
     }
   }
}
int main(int argc, char ** argv)
{
    U8 i8;
    gr_init();
    draw_line(0,0,300,300);
    Lcd_Put24(0,0,0,0,"啊薄病场础怠丁贰浮埂骸尽取摇堋妗稹鳌齄亚忆");
    Lcd_Put24(0,50,0,0,"Yayi");
    for(i8 = 0;i8 < 8;i8++) {
       Lcd_Put24(0,100+i8*50,0,0,string_def[i8*2]);
       Lcd_Put24(300,100+i8*50,0,0,string_def[i8*2+1]);
    }
    exit(EXIT_SUCCESS);
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号