这个软件,,,怎么将字,,转化成字模。。提取出来。。。单片机用。。求解答

这个软件,,,怎么将字,,转化成字模。。提取出来。。。单片机用。。求解答,第1张

应该是这样用,你在这个图片中用鼠标点击一个一个小格子,让后组成你所需要的字,让后再下没基边中出现唯薯想用的代码,你就可以吧这些代码用到你的相应的语言中了,看到有汇编和C语言两种。

我的理解就是这样,我不知道你懂不懂一指察者个基本的知识,单片机是怎样在点阵屏上显示字的。如果你知道点阵LED屏显示在提的原理你就明白了。

没有接触过,纯支持而已。。。

直线和曲线,我们提到了一段三阶Bezier曲线有四个控制点定义:位于曲线上(on-curve)的起始点、两个不在曲线上(off-curve)的控制点和一个曲线上的结束点。TureType字体中的图元轮廓是用二阶Bezier曲线定义的,有三个点:一个曲线袭颂上的点,一个曲线外的点和另一个曲线上的点。多个连续的不在曲线上的点是允许的,但不是用来定义三阶或更高阶的Bezier曲线,而是为了减少控制点的数目。比如,对于on-off-off-on模式的四个点,会加入一个隐含的点使之成为on-off-on-off-on,因此定义的是两段二阶Bezier曲线。

如果设置了G_ONCURVE位,那么控制点在曲线上,否则不在曲线上。如果设置了G_REPEAT,标志数组中的下一字节表示重复次数,当前标志应该重复指定的次数。因此,标志数组中实际使用了某种类型猜禅渣的行程编码穗悄。标志中的其他位用于描述相应 的x坐标和y坐标的编码方式,它们可以表示当前相寻坐标是否和上一个相同、正的单字节值、负的单字节值或有符号两字节值。

解码图元的描述是一个两次扫描的起始点。然后再遍历图元定义中的每一个点把它转换为更容易管理的格式。程序清单14-2列出了解码TrueType图元的函数,它是KTrueType类的一个方法。

int KTrueType::DecodeGlyph(int index, KCurve & curve, XFORM * xm) const

{

const GlyphHeader * pHeader = GetGlyph(index)

if ( pHeader==NULL )

{

// assert(false)

return 0

}

int nContour = (short) reverse(pHeader->numberOfContours)

if ( nContour<0 )

{

return DecodeCompositeGlyph(pHeader+1, curve) // after the header

}

if ( nContour==0 )

return 0

curve.SetBound(reverse((WORD)pHeader->xMin), reverse((WORD)pHeader->yMin),

reverse((WORD)pHeader->xMax), reverse((WORD)pHeader->yMax))

const USHORT * pEndPoint = (const USHORT *) (pHeader+1)

int nPoints = reverse(pEndPoint[nContour-1]) + 1// endpoint of last contour + 1

int nInst = reverse(pEndPoint[nContour]) // instructon length

curve.m_glyphindex = index

curve.m_glyphsize = (int) GetGlyph(index+1) - (int) GetGlyph(index)

curve.m_Ascender = m_Ascender

curve.m_Descender = m_Descender

curve.m_LineGap = m_LineGap

GetMetrics(index, curve.m_advancewidth, curve.m_lsb)

if ( curve.m_glyphsize==0 )

return 0

curve.m_instrsize = nInst

const BYTE * pFlag = (const BYTE *) & pEndPoint[nContour] + 2 + nInst// first byte in flag

const BYTE * pX = pFlag

int xlen = 0

for (int i=0 i<nPoints i++, pX++)

{

int unit = 0

switch ( pX[0] & G_XMASK )

{

case G_XADDBYTE:

case G_XSUBBYTE:

unit = 1

break

case G_XADDINT:

unit = 2

}

if ( pX[0] & G_REPEAT )

{

xlen += unit * (pX[1]+1)

i += pX[1]

pX ++

}

else

xlen += unit

}

const BYTE * pY = pX + xlen

int x = 0

KTrueType类处理TrueType字体的装入和解码,随书光盘中有它的完整源代码。DecodeGlyph给出图元索引和可选的变换矩阵,处理的是单个图元的解码。参数curve是KCurve类,用于把TrueType图元定义保存为32位的点的赎罪以及一个标志数组,以梗用GDI进行显示。这些代码可以作为简单TrueType字体编辑器的基础。

代码中调用了GetGlyph方法,该方法用位置表索引找到该图元的GlyphHeader结构。从中得到图元的轮廓线数目。注意必须反转该值的字节序,因为TrueType字体用的是Big-Endian字节序。如果该值为负值,说明这是一个合成图元,应该转而调用DecodeCompositeGlyph方法。接下支的代码定位了endPtsOfContours数组,找出点的总数,然后跳过指令找到标志数组的起始位置。

以下几种方法供你参闭肢基考:

1、选择带汉字库的LCD模块,这样你就根本不用自己做字模

2、建一个字模小库,按顺序填充字模,这样每个字模占用16个字节,按这个记录取就OK了,比如依次为:天、气、晴、阴。那么显示天从第0地址开始取饥族16个字节,轿谨显示阴则从48地址开始取。

3、建一个字模小字库,每个字占用18个字节,其中前两个为该字的区位码,呵呵,则样显示程序很好编了,直接查区位码再取字模就OK了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12375032.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存