




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
昨天说到bdf这种字体表示方式和一个加粗脚本bdfbold.pl,本文对其做了进一步分析。morebdf文件解构:- 文件描述包括字体名称/大小/字数/编码等信息- 单个的字体点阵信息STARTCHAR - ENDCHAR .-例如:1、terminus的6x12点阵字(常规)ter-u12n.bdf/字体头部描述文STARTFONT 2.1COMMENT ter-u12nFONT -xos4-Terminus-Medium-R-Normal-12-120-72-72-C-60-ISO10646-1SIZE 12 72 72FONTBOUNDINGBOX 6 12 0 -2STARTPROPERTIES 19FOUNDRY xos4FAMILY_NAME TerminusWEIGHT_NAME MediumSLANT RSETWIDTH_NAME NormalADD_STYLE_NAME PIXEL_SIZE 12POINT_SIZE 120RESOLUTION_X 72RESOLUTION_Y 72SPACING CAVERAGE_WIDTH 60CHARSET_REGISTRY ISO10646CHARSET_ENCODING 1MIN_SPACE 0FONT_ASCENT 10FONT_DESCENT 2DEFAULT_CHAR 65533COPYRIGHT Copyright (C) 2005 Dimitar Toshkov ZhekovENDPROPERTIESCHARS 603./字体“A”点阵描述单元STARTCHAR AENCODING 65SWIDTH 500 0DWIDTH 6 0BBX 6 12 0 -2 /字体点阵大小6为宽12为高,见下面贴图中红框框BITMAP00 /字体第1行 00:为16进制 表示成2进制为:0000000000 /字体第2行 00:为16进制 表示成2进制为:0000000070 /字体第3行 70:为16进制 表示成2进制为:0111000088 /字体第4行 88:为16进制 表示成2进制为:1000100088 /字体第5行 88:为16进制 表示成2进制为:1000100088 /字体第6行 88:为16进制 表示成2进制为:10001000F8 /字体第7行 F8:为16进制 表示成2进制为:1111100088 /字体第8行 88:为16进制 表示成2进制为:1000100088 /字体第9行 88:为16进制 表示成2进制为:1000100088 /字体第10行 88:为16进制 表示成2进制为:1000100000 /字体第11行 00:为16进制 表示成2进制为:0000000000 /字体第12行 00:为16进制 表示成2进制为:00000000ENDCHAR 看出来了没?这里刚好组成一个向左对齐的大写的A字。是的,BITMAP后面的16进制中用2进制表示话,1表示一个点/0表示空白,通过点和空白表示的就是一个点阵字。2、terminus的6x12点阵字(粗体,由bdfbold.pl从上文转换)ter-u12b.bdf/字体头部描述文STARTFONT 2.1COMMENT ter-u12nFONT -xos4-Terminus-Bold-R-Normal-12-120-72-72-C-60-ISO10646-1SIZE 12 72 72FONTBOUNDINGBOX 7 12 0 -2STARTPROPERTIES 19FOUNDRY xos4FAMILY_NAME TerminusWEIGHT_NAME BoldSLANT RSETWIDTH_NAME NormalADD_STYLE_NAME PIXEL_SIZE 12POINT_SIZE 120RESOLUTION_X 72RESOLUTION_Y 72SPACING CAVERAGE_WIDTH 60CHARSET_REGISTRY ISO10646CHARSET_ENCODING 1MIN_SPACE 0FONT_ASCENT 10FONT_DESCENT 2DEFAULT_CHAR 65533COPYRIGHT Copyright (C) 2005 Dimitar Toshkov ZhekovENDPROPERTIESCHARS 603./字体粗体“A”点阵描述单元STARTCHAR AENCODING 65SWIDTH 583 0DWIDTH 7 0BBX 7 12 0 -2 /字体点阵大小7为宽12为高,见下面贴图中红框框BITMAP00 /字体第1行 00:为16进制 表示成2进制为:0000000000 /字体第2行 00:为16进制 表示成2进制为:0000000078 /字体第3行 00:为16进制 表示成2进制为:01111000CC /字体第4行 00:为16进制 表示成2进制为:11001100CC /字体第5行 00:为16进制 表示成2进制为:11001100CC /字体第6行 00:为16进制 表示成2进制为:11001100FC /字体第7行 00:为16进制 表示成2进制为:11111100CC /字体第8行 00:为16进制 表示成2进制为:11001100CC /字体第9行 00:为16进制 表示成2进制为:11001100CC /字体第10行 00:为16进制 表示成2进制为:1100110000 /字体第11行 00:为16进制 表示成2进制为:0000000000 /字体第12行 00:为16进制 表示成2进制为:00000000ENDCHAR 跟上面比较这个是不是一个左对齐大写的粗体A字?两个字体的xmbdfed中的表示,贴图:下面来分析一下bdfbold.pl这个脚本到底做了什么#!/usr/bin/perl -w# Convert bdf fonts to bold style.# Copyright (C) 1994-95 Cronyx Ltd.# Author: Serge Vakulenko, # Changes Copyright (C) 1995-1997 by Andrey A. Chernov, Moscow, Russia.# This software may be used, modified, copied, distributed, and sold,# in both source and binary form provided that the above copyright# and these terms are retained. Under no circumstances is the author# responsible for the proper functioning of this software, nor does# the author assume any responsibility for damages incurred with its use.# Changes (C) 2000 by Serge Winitzki: speeded up algorithm by 2x.# 下面这几个hash标量是用来做16进制到2进制表示转换的# 从16进制到2进制$pattern0 = 0000;$pattern1 = 0001;$pattern2 = 0010;$pattern3 = 0011;$pattern4 = 0100;$pattern5 = 0101;$pattern6 = 0110;$pattern7 = 0111;$pattern8 = 1000;$pattern9 = 1001;$patterna = 1010; $patternA = 1010;$patternb = 1011; $patternB = 1011;$patternc = 1100; $patternC = 1100;$patternd = 1101; $patternD = 1101;$patterne = 1110; $patternE = 1110;$patternf = 1111; $patternF = 1111;$patternn = ; $patternr = ;# 从2进制到16进制$hexdig0000 = 0;$hexdig0001 = 1;$hexdig0010 = 2;$hexdig0011 = 3;$hexdig0100 = 4;$hexdig0101 = 5;$hexdig0110 = 6;$hexdig0111 = 7;$hexdig1000 = 8;$hexdig1001 = 9;$hexdig1010 = A;$hexdig1011 = B;$hexdig1100 = C;$hexdig1101 = D;$hexdig1110 = E;$hexdig1111 = F;$swidth = $dwidth = -1;# 首先处理字体头部描述文while () if (/WEIGHT_NAMEs/) s/Medium/Bold/; # 将字体描述从Medium替换为Bold说明该字体是粗体print; elsif (/FONTs/) s/-Medium-/-Bold-/; # 同上print; elsif (/FONTBOUNDINGBOXs/) r = split;$h = $r2;$w = $r1 + 1; # 将字体点阵宽度加1,因为要对字体做加粗处理。printf FONTBOUNDINGBOX %d %d %d %dn, $w, $h, $r3, $r4; elsif (/CHARSs/) print;last; else print;while () if (/STARTCHARs/) print; elsif (/ENDCHAR/) print; elsif (/ENCODINGs/) print; elsif (/SWIDTHs/) r = split;$swidth = $r1; elsif (/DWIDTHs/) r = split;$dwidth = $r1; elsif (/BBXs/) r = split;$h = $r2;$w = $r1; # 以下为对dwidth和swidth做处理?$h = int ($dwidth * 1000 / $swidth) + 0.5)if ($h = 0 & $dwidth = 0 & $swidth = 0);$dwidth = $wif ($dwidth 0);$dwidth+; # dwidth 加1$w+; # 点阵宽度加1printf SWIDTH %d 0n, int ($dwidth * 1000 / $h) + 0.5);printf DWIDTH %d 0n, $dwidth;$w = 0if ($r1 = 0 & $r2 = 0);$h = 0if ($r2 = 0);printf BBX %d %d %d %dn, $w, $h, $r3, $r4; elsif (/BITMAP/) # 对BITMAP段的字体点阵描述表进行加粗处理$swidth = $dwidth = -1;print BITMAPn;&makechar; # 调用该函数做加粗处理print ENDFONTn;# 加粗处理函数sub makechar for ($i=0; $i=1; -$n) # 按列从右到前进行处理if (substr($b, $n-1, 2) eq 10) # 如果发现当前位是0而前一位为1 #
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 更新钢管井施工方案(3篇)
- 道路石材面板施工方案(3篇)
- 严管厚爱系列活动方案策划(3篇)
- 景区许愿活动策划方案模板(3篇)
- 长宁企业年会活动策划方案(3篇)
- 机械模具考试题库及答案
- 教学课件里能用党旗党徽
- 小学学科融合题目及答案
- 改写寻隐者不遇作文14篇
- 文化娱乐行业节目分类表
- 台湾-国民年金保险课件
- 血透室运用PDCA循环降低无肝素透析凝血发生率品管圈成果汇报
- 三叉神经痛微球囊压迫术的护理
- 主持人妆 男主持人上镜妆
- 安全伴我行-大学生安全教育智慧树知到答案章节测试2023年哈尔滨工程大学
- LY/T 1828-2009黄连木栽培技术规程
- 安全文明施工措施费清单五篇
- X射线衍射课件(XRD)
- 常见皮肤病的种类及症状图片、简介大全课件
- 高中化学学法指导课件
- 吊篮拆除安全技术交底方案
评论
0/150
提交评论