设为首页收藏本站官方微博

[转贴] GF汉化详细教程[字库制作篇]

[复制链接]
查看: 1866|回复: 0
打印 上一主题 下一主题

[转贴] GF汉化详细教程[字库制作篇]

跳转到指定楼层
楼主
发表于 2008-10-6 10:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

[转贴] GF汉化详细教程[字库制作篇]

  * ?; T' b7 i/ u" V( B
  
, O- d: h7 @0 R在上次字体篇提到要追加GB2312的全部汉字到点阵字库中。但由于GF的字库不是标准点阵字库,它用FF表示一个点,所以字库无法在现有的点阵字库中得到,而只能通过写程序生成GF格式的点阵字库。引出另一个问题,这么多汉字的点阵应该怎么生成。比较好的解决方法是把的矢量字库中的字转换成我们需要的点阵格式。 ) o/ ]: A5 e( Q! k# s! K" B5 ^
3 o! w% M# L' R2 W9 r, [0 z. y
矢量字体转换成点阵字体需要以下几步,(以转换为16*16点阵的字体为例):
- k7 ]% F, a1 ?+ O- ~( b$ U1 P* g+ ^" P8 W7 |1 L+ O
1.  准备一个背景是白色的16*16点阵的位图。
- Y8 m6 R1 n8 w
4 d2 {( Z1 q1 j2.  读位图到内存,在图片上居中写入你要转换的字。 $ ]: h: d/ _9 {7 S, a- K

) E, v8 B/ X/ T2 S9 k7 f3.  循环读位图每一位的颜色信息,如果此点颜色是黑色,证明是一个点,写入FF,其它位置写入0,得到点阵。 ! M- j2 g1 m. O4 S# ]9 O* l- p
; ~7 D: N% `$ H+ k! p: T7 [
  
, R* N" @* ~. y7 m& e" \' P1 s" O3 S! m2 i2 z
以下是生成单个字的转换函数(c#实现):
) }! k# Q5 M4 {+ x: n+ {
6 Q( b) P, \& y7 P
! I9 Y" T+ ~* X& ~$ F/**//// <summary>   y1 P7 s  q" K$ r7 H% `8 X
        /// 生成单个16*16点阵的字库 3 w7 o/ @6 Y% _5 ^; [4 [
        /// </summary> ( i& e; ^2 B8 ]: z- n6 B
        /// <param name="str"></param>
) c0 s4 G. A* ?4 d8 r, K% u        /// <returns></returns>
# q5 Z( |6 h3 K" K3 Q- i  X        private byte[,] DrawChar(string str)
2 g9 I- \* y6 {5 R8 P+ }/ Y! t0 ^        {
2 r, c; C3 W' c; m  C4 ]            byte[,] result = new byte[16,16];
) X4 U8 q% T/ _
/ E/ P$ V- H6 R8 {. P/ m* Y' ]2 v/ ^            StringFormat sf = new StringFormat();   K! t0 d/ p: P  b' v/ R
            sf.Alignment = StringAlignment.Center; . ^; W* Y# M9 q5 X# L; i( k, g
            sf.LineAlignment = StringAlignment.Near;
" l. J  k! T: E ) k& e  y: a' C( D! V+ V
            Bitmap bmp = new Bitmap(Application.StartupPath +"\\blank.bmp",true);
+ m, X# T8 |: u4 t; D            Graphics g = Graphics.FromImage(bmp);
/ W$ w3 |. `, Q( M            //参数大小只适用于16*16点阵
3 O. Z% \% v. R/ R/ o# [            g.DrawString(str,new Font("宋体",12),Brushes.Black,new Rectangle(0,0,16,16),sf); & h6 n! g5 _- f7 ]1 V! i5 A
             6 H! f5 `+ H. [+ @/ G9 c: T
            //结果写入16*16 字节数组 5 y/ L) J) n% L3 i8 t
            for(int i=0; i<bmp.Height; i++)   D9 V; ?8 A. I1 b
                for(int j=0; j<bmp.Width;j++) , J  W$ |4 x1 Q7 }9 g- S
                {
. ?; K! J2 T/ A7 p! k; X                    if(bmp.GetPixel(j,i) == Color.FromArgb(255,255,255))//白色 # r% x+ j( Z& R
                        result[i,j] = 0;
1 X& C/ _8 U5 n& f0 L8 }                    else , w' O  E* y4 y* A) L5 }# Q
                        result[i,j] = 0xff;
, m& z! x& e  D& Z, C) A8 @! R  ~                }
- ]& g2 \5 q3 S7 ]- C( A/ D1 f            return result; 9 j# P: ]5 L7 {/ f9 e
        }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表