• 大小: 344KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: C/C++
  • 标签:

资源简介

点阵输出汉字,用汉字字库输出放大的汉字,汉字字库,c++

资源截图

代码片段和文件信息

// HanZi.cpp : Defines the entry point for the console application.
//

#include “stdafx.h“
#include “stdio.h“
#include “stdlib.h“
#include “conio.h“
#include “string.h“

/*
  从键盘获得汉字的编码
  在中文windows下,默认编码方式为GB2312 每个汉字由两个字节组成。
  函数的目的是:把这个汉字的高字节写入 pc1指向的位置,低字节写入 pc2指向的位置
*/
int get_han_zi(unsigned char* pc1 unsigned char* pc2)
{
char buf[100];
printf(“\n请输入一个汉字:“);
gets(buf);
if(strlen(buf) != 2) return -1;

*pc1 = buf[0];
*pc2 = buf[1];
if(*pc1 < 0xa1) return -2;
if(*pc2 < 0xa1) return -2;

return 0;
}

/*
  从文件(字形文件HZK16)把字形装入到一个32字节的缓冲区 buf 中。
  c1 是该汉字GB2312编码的高字节,c2是低字节。

  每个bit代表1个像素点,16点阵的字模需要256个像素点信息,故需32字节
  字节的排列与16点阵像素的对应关系如下图:
  
  第0字节 第1字节
  第2字节 第3字节
  .......
  第14字节 第15字节

  也就是说:每1行的16个点由2个字节提供。顺序是:从上到下,从左到右。

  GB2312的编码规则是:前一个字节表示区号,后一个表示区中的偏移序号。
  每个区有94个汉字。区号和序号的编码都是从 0xA1开始(为了避免和西文冲突)
  因此,已知某个汉字的编码,就可以计算出文件中所在的绝对位置。
*/
void load_han_zi(unsigned char* buf unsigned char c1 unsigned char c2)
{
int n = (c1 - 0xa1) * 94 + (c2 - 0xa1); // 计算在文件中的位置

FILE* fp = fopen(“HZK16.DAT“ “rb“);
if(fp==NULL){
printf(“汉字库打开错!“);
exit(1);
}

fseek(fp n * 32L SEEK_SET);

for(int i=0; i<32; i++){
buf[i] = (unsigned char)fgetc(fp);
}

fclose(fp);
}

/*
  显示汉字
  buf: 从文件中读出的汉字字模信息,32字节,说明同上
  italic: =1,如果要求斜体, =0 正常
  kx: 水平放大率
  ky: 垂直放大率
  fill: 用于填充的字符
*/
void show_han_zi(unsigned char* buf int italic int kx int ky char fill)
{
printf(“\n .....................请考生完成!\n“);
int ikjlh;
unsigned char chtemp;
for(i=0; i<16; i++)//16行
for(h=0; h {
if(italic)//斜体
for(k=0; k<(15-i); k++)
printf(“ “);
for(l=0; l<2; l++)//每行两个字节
{
ch=buf[2*i+l];
for(j=0; j<8; j++)
{
temp=ch & 0x80;   //temp的最高位等于ch的最高位其他位全为0
ch=ch<<1;   //ch左移一位
for(k=0; k if(temp==0x80)   //如果temp的最高位为1输出填充字符
printf(“%c“fill);
else
printf(“ “);
}
}
printf(“\n“);
}
}


/*
  与屏幕的输出类似.
  只是写入到一个名字为 a.txt 的文件中
*/
void write_to_file(unsigned char* buf int italic int kx int ky char fill)
{
printf(“\n 考生也可完成之,不要求!\n “);
FILE* fp = fopen(“a.txt“ “w“);
if(fp==NULL){
printf(“文件打开出错“);
exit(1);
}
int ikjlh;
unsigned char chtemp;
for(i=0; i<16; i++)//16行
for(h=0; h {
if(italic)//斜体
for(k=0; k<(15-i); k++)
fputc(‘ ‘fp);
for(l=0; l<2; l++)//每行两个字节
{
ch=buf[2*i+l];
for(j=0; j<8; j++)
{
temp=ch & 0x80;   //temp的最高位等于ch的最高位其他位全为0
ch=ch<<1;   //ch左移一位
for(k=0; k if(temp==0x80)   //如果temp的最高位为1输出填充字符
fputc(fillfp);
else
fputc(‘ ‘fp);
}
}
fputc(‘\n‘fp);
}
fclose(fp);
}

int set_zoom_k(int* pk)
{
printf(“请输入放大率(1-4):“);
char buf[100];
gets(buf);

int n = atoi(buf);
if(n<1 || n>4) return -1;

*pk = n;
return 0;
}

char get_fill_char()
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4224  2010-04-26 23:33  点阵输出汉字\a.txt

     文件     188486  2010-04-26 23:32  点阵输出汉字\Debug\HanZi.exe

     文件     336076  2010-04-26 23:32  点阵输出汉字\Debug\HanZi.ilk

     文件      14885  2010-04-26 23:32  点阵输出汉字\Debug\HanZi.obj

     文件     228200  2010-04-24 23:43  点阵输出汉字\Debug\HanZi.pch

     文件     492544  2010-04-26 23:32  点阵输出汉字\Debug\HanZi.pdb

     文件      41984  2010-04-26 23:32  点阵输出汉字\Debug\vc60.idb

     文件      53248  2010-04-26 23:32  点阵输出汉字\Debug\vc60.pdb

     文件       5317  2010-04-26 23:32  点阵输出汉字\HanZi.cpp

     文件       3389  2010-04-24 00:32  点阵输出汉字\HanZi.dsp

     文件        518  2010-04-24 00:34  点阵输出汉字\HanZi.dsw

     文件      58368  2010-04-26 23:34  点阵输出汉字\HanZi.ncb

     文件      48640  2010-04-26 23:34  点阵输出汉字\HanZi.opt

     文件       1173  2010-04-26 23:32  点阵输出汉字\HanZi.plg

     文件     267616  1998-09-06 07:20  点阵输出汉字\HZK16.DAT

     文件       1202  2010-04-12 15:55  点阵输出汉字\ReadMe.txt

     文件        292  2010-04-12 15:55  点阵输出汉字\StdAfx.cpp

     文件        667  2010-04-12 15:55  点阵输出汉字\StdAfx.h

     文件       1115  2010-04-26 23:37  点阵输出汉字\问题描述.txt

     目录          0  2010-04-26 23:35  点阵输出汉字\Debug

     目录          0  2010-04-26 23:37  点阵输出汉字

----------- ---------  ---------- -----  ----

              1747944                    21


评论

共有 条评论

相关资源