日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...

發布時間:2024/10/6 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄: DOS下的點陣漢字 漢字的內碼 漢字字模 漢字庫文件 打印字庫文件和HZK12

main()

{

unsigned char *s,*e="ABcd",*c="你好";

clrscr();

printf("English char =");

s=e;

while(*s!=0) /*C的字符串以0為結束符*/

{

printf("%3d,",*s);

s++;

}

printf("\nChinease char=");

s=c;

while(*s!=0)

{

printf("%3d,",*s);

s++;

}

getch();

}

再用TC輸入*.txt打開運行,看見了沒有,那些數值即英文和漢字的各字節內碼。

而中文的“你”在字模中卻是這樣記載的:

在硬件系統內,英文的字模信息一般固化在ROM里,即使在沒有進入系統的CMOS里,也可以讓你看到英文字符。而在DOS下,中文的字模信息一般記錄在漢字庫文件HZK16里。

了解字母和漢字是按字 模位信息顯示的原理后,那如何得到漢字的字模信息呢?難道要我們自己去做?NO。DOS前輩們經過艱辛的努力,將制作好的字模放到了一個個標準的庫中以免 去后輩的麻煩,這就是點陣字庫文件。一般我們使用16*16的點陣宋體字庫,所謂16*16,是每一個漢字在縱、橫各16點的區域內顯示的。不過后來又有 了HZK12、HZK24,HZK32和HZK48字庫及黑體、楷體和隸書字庫。雖然漢字庫種類繁多,但都是按照區位的順序排列的。前一個字節為該漢字的 區號,后一個字節為該字的位號。每一個區記錄94個漢字,位號則為該字在該區中的位置。因此,漢字在漢字庫中的具體位置計算公式為:94*(區號-1)+ 位號-1。減1是因為數組是以0為開始而區號位號是以1為開始的。這僅為以漢字為單位該漢字在漢字庫中的位置,那么,如何得到以字節為單位得到該漢字在漢 字庫中的位置呢?只需乘上一個漢字字模占用的字節數即可,即:(94*(區號-1)+位號-1)*一個漢字字模占用字節數,而按每種漢字庫的漢字大小不同 又會得到不同的結果。以16*16點陣字庫為例,計算公式則為:(94*(區號-1)+(位號-1))*32。漢字庫文該從該位置起的32字節信息即記錄 了該字的字模信息。

漢字庫文件

了解點陣漢字及漢字庫的構成原理后,顯示漢字就變得簡單。以16*16點陣字庫為例,通常的方法是:將文件工作指針移到需要的漢字字模處、將漢字庫文件讀入一2*16數組再用for循環一位位地顯示。以使用VGAHI模式顯示“我”字為例,程序如下:#include "graphics.h"

#include "stdio.h"

main()

{

int i=VGA,j=VGAHI,k;

unsigned char mat[16][2],chinease[3]="我";

FILE *HZK;

if((HZK=fopen("hzk16","rb"))==NULL)

exit(0);

initgraph(&i,&j,"");

i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*獲得區碼與位碼*/

fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);

fread(mat,32,1,HZK);

for(j=0;j<16;j++)

for(i=0;i<2;i++)

for(k=0;k<8;k++)

if(mat[j][i]&(0x80>>k)) /*測試為1的位則顯示*/

putpixel(i*8+k,j,WHITE);

getch();

closegraph();

fclose(HZK);

}怎么樣?只要掌握了正確的方法,顯示漢字并不復雜。

如果你有UCDOS的 HZK24S(宋體)、HZK24K(楷體)或HZK24H(黑體),你還可以使用不同字體的大字模漢字了。HZK24系列是24*24的點陣字庫,每字 模占用3*24字節。如果你按照HZK16的顯示方法的話,你會看到......呵呵,字被放倒了。這是因為該類字庫與一般的漢字庫不同,這類大字模漢字 庫是專供打印的打印字庫,為了打印的方便將字模都放倒了,你使用時,只要將字模的位信息縱橫轉置顯示即可。例如你如果定義為mat[24][3]則應該這 樣輸出:for(i=0;i<24;i++)

for(j=0;j<24;j++)

if((0x80>>i%8)&mat[j][i/8]) /*轉置顯示*/

putpixel(j+x,y+i,color);還有一類字庫HZK12,雖然屬于標準字庫類型,但如果你將它的字模 當作12*12位計算的話,根本無法正常顯示漢字。因為字庫設計者為了使用的方便,字摸每行的位數均補齊為8的整數倍,于是實際該字庫的位長度是 16*12,雖然每行都多出了4位,但這4位都是0(不顯示),并不影響顯示效果。

總結

以上是生活随笔為你收集整理的python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。