tyoutyou
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1878回复:4

关于如何得知,打印时,text的打印方式的问题。

楼主#
更多 发布于:2005-04-20 15:00
以下主要针对TrueType font
先解释一下,一般来说,打印一个text,可以竖着打vertical,横着打horinal,还有一种是确定打印方向的reverse...当然也有其他很多,这里暂不考虑。
拿vertical为例,每个字符又都可以是横的或竖的,除了vertical font以外。一般来说,向下打,就把字符转负90度(也就是向右转),向上打(reverse),就把字符转正90度。在打印时我使用的是pclxl语言,所以主要通过setcharangle ,setcharscale。来解决问题。
好了,问题来了。
如何在drvtextout中得知一个glyph的正确方向或者说角度呢?
先列出我使用过的失败的方法:
gdi提供的参数(STROBJ)pstro->flAccel进行判断,发现此参数没有msdn的描述的那么有用。
通过计算pstro->pgp(注意此参数可能为null有时要先处理以下),获得glyph坐标,通过加减同一个string中的坐标来判断打印方向。可是致命伤是如果只有一个glyph....就没办法。。
实际上在对图形中的文字进行打印时也有问题,就是字根据图形横向和纵向扩缩的扩缩(powerpoint里比较明显)比例计算。不过小人不贪心,请大大们先解决上面的吧。。。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-21 08:39
问题没有描述清楚,

好像是要得到打印时字符串的角度和方向吧?
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
tyoutyou
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-21 09:22
简单的说就是字符串的角度和方向(这个可以回避,我有替代方案了
),以及字符串中的单个字符的角度和放缩。
你可以试着用word,powerpoint打一竖排字,英文字符从上往下打时和从下往上时角度不一样(从下往上的情况估计图形里比较多见)。简而言之,如何解决可能没有规律的字符旋转打印,也就是说如果我给你任意一个被旋转过的字符(单纯的旋转不包含象italic那样的字体变形),如何判断它相对于y轴旋转的角度。
然后是字符放缩问题,在powerpoint里将一个图形横向缩小,图形里的字也会横向变窄,但字体的大小也就是我们以前讨论过的size是不会改变的(这一点和word里的位图放缩不一样)。这个时候我需要知道,横向缩小的比例怎么办。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-21 18:10
也就是longfont里面的
  LONG lfEscapement;
  LONG lfOrientation;

你是怎么得到或计算出来的?

学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
tyoutyou
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-22 15:15
longfont??
这个我没查到过,logfont到见过。但是DrvTextOut里只提供FONTOBJ
和STROBJ,这个东西怎么获得阿。。。
我现在用的是:
先用FONTOBJ_pvTrueTypeFontFile读取文件,在根据文件格式找到glyph的AdvanceWidth.然后用
AdvanceWidth*size/pifi->fwdUnitsPerEm(size就是我们讨论过的字体大小,pixel值),获得原始宽度。在用STROBJ获取现在的实际宽度
这样两者一比就是横向放缩比例了。
对于纵向的,我试了几种方法,都不够准确,主要是当前的实际高度取得不准。该死的mic也没提供什么高度值。。。只有一个
pstro->rclBkGround,可是对于century 这类字体,这个rectl的竖边
太长了。。

另外角度问题,现在一筹莫展,用bitmap方式先代替了。。
游客

返回顶部