游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4649|回复: 3

仍然是FreeType对齐问题!

[复制链接]

53

主题

98

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-9-9 10:45:00 | 显示全部楼层 |阅读模式
我用FT_Set_Pixel_Sizes( m_pFTFace, 12*16, 12*16);设置字体大小是12*16,
然后我新建了一个二维数组:
BYTE **ppFontColorArray = new BYTE*[12* 16];
for(int iRow=0;iRow<12*16;iRow++)
{
     ppFontColorArray[iRow] = new BYTE[12* 16];
}

我现在想把m_FT_Face->glyph->bitmap数据写到ppFontColorArray二维数组中,我的方法是这样的:
for(int i = 0; i< bitmap.rows ; i++)
{

     memcpy(ppFontColorArray[i + (12*16 - m_FT_Face->glyph->bitmap_top - 1)] +
            m_FT_Face->glyph->bitmap_left ,bitmap.buffer + ( i * bitmap.pitch),bitmap.width);
}
却始终会出现内存溢出的情况,是字体校准有问题,比如“日”这个字,它的几个参数是:
bitmap_left = 29
bitmap_top = 148
bitmap.rows = 171
请问应该怎么把m_FT_Face->glyph->bitmap数据正确校准并写入ppFontColorArray数组中呢?

53

主题

98

帖子

101

积分

注册会员

Rank: 2

积分
101
 楼主| 发表于 2009-9-9 14:29:00 | 显示全部楼层

FreeType的坐标问题

FT中bitmap的坐标系是怎么样的?是左边的还是右边这样坐标系的呢?
0_________________
|                 X        |Y
|                          |
|                          |
|                          |
|Y                         |_________________           
                           0                  X
另外对于字的bitmap_left,与bitmap_top,是字的哪个点的坐标呢?
比如“日”字,它的
bitmap_left = 29
bitmap_top = 148
请问这个坐标是下图中A,B,C,D的哪个点的坐标?

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-9-9 16:48:00 | 显示全部楼层

Re:仍然是FreeType对齐问题!

http://www.freetype.org/freetype2/docs/tutorial/step2.html

他不是对应那个点, 而是该图距左边, 及距上边.
原点是在文档中.

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2009-9-9 17:57:00 | 显示全部楼层

Re:仍然是FreeType对齐问题!

恰好最近也研究了一下freetype。首先bitmap的尺寸就是width和rows,不能超出(比如一些符号只有几个像素)

但是显示排版,需要坐标做一些偏移后显示(例如 log ,g的显示位置就是个很独特的地方,不顶头,且要下半部比其他多出一截)。

目前我用的笨办法,先做一次循环,横排列的话,取出一行文字中 by = Max(by,metrics.horiBearingY),以及by_b = Max(by_b,metrics.height-metrics.horiBearingY),2个之和作为这行文字的总高度,再把文字按照
by - metrics.horiBearingY的纵坐标绘制到这行上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-6 07:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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