23,125
社区成员
发帖
与我相关
我的任务
分享
#define MAX_HZ_FILE_LEN 300000
char g_hz_inited=0;
char g_hz_buffer[MAX_HZ_FILE_LEN];
char *g_hz_file_name = "./Hzk16.dat"; //中文字库
int g_hz_file_size=0;
int init_hz()
{
int fd;
int file_size=0;
fd = open(g_hz_file_name, O_RDWR, 0666);
if(fd<0)
{
return -1;
}
lseek(fd, 0, SEEK_SET);
g_hz_file_size = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
file_size = 0;
int tmp_size=0;
while (file_size < g_hz_file_size)
{
tmp_size = read(fd, g_hz_buffer + file_size, g_hz_file_size - file_size);
file_size = file_size + tmp_size;
}
g_hz_inited = 1;
close(fd);
return 0;
}
int convert_hz_to_bmp(uint8_t *str, char * buffer)
{
int i,j,k;
int qcode,wcode;
char mat[16][2];
char * hz_ptr;
qcode=(*str)-0xa0;
wcode=*(str+1)-0xa0;
if (!g_hz_inited)
{
if (init_hz()<0)
return -1;
}
hz_ptr = g_hz_buffer + (94*(qcode-1)+(wcode-1))*32;
for(i=0;i<16;i++)
{
for(j=0;j<2;j++)
{
mat[i][j]=*(hz_ptr++);
}
}
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
{
if(mat[j][i]&(0x80>>k))
{
buffer[3*(j*16 + i*8 + k)] = 255;
}else
{
buffer[3*(j*16 + i*8 + k)] = 0;
}
buffer[3*(j*16 + i*8 + k) + 1] = 0;
buffer[3*(j*16 + i*8 + k) + 2] = 0;
}
return 0;
}