`
xfei6868
  • 浏览: 69808 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

实现字体镜像的几种方式

阅读更多
[size=medium][color=blue]    字体的镜像一直是软件没有解决的一个问题,被困扰了几年都没人去研究解决。记得刚来公司的时候,也调查过这个任务,也找到一个很有价值的实例。当时找到万一老师的delphi博客,上面有一篇文章《区域变换》http://www.cnblogs.com/del/archive/2008/06/03/1212534.html其中有:
[/color][/size]
{建立路径}
  BeginPath(cvs.Handle);
  cvs.TextOut(100, 0, 'F');
  EndPath(cvs.Handle);

  {将路径转换为区域}
  Rgn := PathToRegion(cvs.Handle);
......
7: begin {水平镜像}
      TXF.eM11 := -1;
      TXF.eM12 := 0;
      TXF.eM21 := 0;
      TXF.eM22 := 1;
      TXF.eDx := 200; {需要右移一些才能看到}
      TXF.eDy := 0;
...
{执行变换并重绘}
  Rgn := ExtCreateRegion(@TXF, RgnDataSize, RgnData^);


   这几部分的明显实现了对字体镜像的功能,由于当时只是看到功能,对这些东西的意义不是很透彻,所以这样的建议被淘汰了,原因(最大的原因没人明白其中的意义 )“好像是对一片区域的拷贝,这样会有问题”。总觉得看着例子很正常啊!怎么会是有问题呢?后来在自己的调查中逐渐也了解了关于path,region的意义。path,region在gdi中也是两种图形,通过他们可以用简单的方式画出更加多样的图像。因为生成光绘的时候如果遇到中文字体的话,就没办法自己造字了,因为中文字有很多很多,所以这也是一个一直没有解决的问题。
    后来在研究path图形的时候,用到以下代码可以取到字体的边缘点数据。

    BeginPath(PDC);
    TextOut(PDC, x, y, PChar(TextStr), Length(TextStr));
    EndPath(PDC);

    这样的话镜像也可以很容易实现了:
    BeginPath(PDC);
    TextOut(PDC, x, y, PChar(TextStr), Length(TextStr));
    EndPath(PDC);

    count := GetPath(PDC, pts^, types^, 0);
    GetMem(pts, count * SizeOf(TPoint));
    GetMem(types, count);
    count := GetPath(PDC, pts^, types^, count);



定义:
    pts: ^TPArr;
    types: ^TTArr;
    count: Integer;

type
    TPArr = array[0..0] of TPoint;
    TTArr = array[0..0] of Byte;


    但是这样画出来的自己怎么看上去都没有textout出来的那么清晰,但是也只能这样了,好像有个GetGlyphOutline听说得到的点数据会更精确一些,不过没有确认,这个有些复杂。

    另外的方面就是directx 和 opengl 的实现方法,由于对这两种技术一直没有机会接触,所以也就没有发言权了。
分享到:
评论

相关推荐

    镜像制作器

    “ISO光盘镜像制作器”允许用户以几种方式创建镜像。首先,你可以使用它来抓取现有光盘的内容,生成对应的ISO文件。这通常涉及将光盘插入驱动器,然后运行软件,选择“从光盘创建ISO”选项。软件会读取光盘上的所有...

    IOS镜像浏览器

    在iOS设备上使用镜像浏览器有以下几个关键知识点: 1. **安全与隐私**:使用镜像浏览器时,必须确保连接到的镜像站点是安全可靠的,以防止个人信息泄露或遭受恶意软件攻击。用户应检查URL是否正确,并避免在不信任...

    android几种图形特效

    本文将深入探讨几种常见的Android图形特效,包括图片的圆角、图片的缩放、图片的倒影以及图片的旋转,这些都是Android开发者需要掌握的基本技能。 首先,我们来看如何实现图片的圆角效果。在Android中,可以使用...

    Plamo

    在字体设计领域,Plamo具备以下几个关键知识点: 1. **字体基础**:字体是文字的视觉表现形式,包括字形、大小、粗细和间距等元素。Plamo让用户能够从零开始构建自己的字体库,理解字体的基本构造如笔画、曲线和...

    googleapies-css-fonts.tar.gz

    10. **字体加载策略**:考虑使用 `font-display` CSS 属性来控制字体加载期间的文本呈现方式,避免用户看到闪烁的文本。 通过本地化 Google Fonts,开发者可以更好地控制网页的性能和用户体验,特别是在网络环境不...

    红旗Red_Flag_inWiseV8.0安装方式.pdf

    综上所述,红旗Red_Flag_inWiseV8.0操作系统安装方式的知识点主要涵盖了如下几个方面: 1. 红旗Red_Flag_inWiseV8.0操作系统的特点与适用对象。 2. 安装前的准备工作,包括下载操作系统镜像文件。 3. 安装方法的...

    8X8-dot-matrix-font-software.rar_8X8点阵取字模软件_8x8 matrix_Dot._MATR

    8X8点阵字体软件是一种专门用于创建和编辑8x8像素点阵字体的工具。在计算机图形学中,点阵字体是由像素点组成的字符图形,每个字符由8行8列的二进制点组成,形成一个8x8像素的矩阵。这种小型的点阵字体常用于低...

    解决Zabbix图形化界面图标乱码不显示问题

    2. **安装缺失字体**:根据问题描述,提供的文件"DejaVuSans.ttf"是DejaVu Sans字体文件,这是一种广泛支持Unicode字符集的字体。在Zabbix服务器上安装此字体可以解决许多乱码问题。将字体文件上传至服务器,然后...

    dark-gitlab:用于GitLab和自托管GitLab实例的非常可定制的深色主题。 gitlab.comvednocdark-gitlab的镜像

    黑暗GitLab 为和自托管的GitLab实例提供了有针对性的,可自定义的暗光模式实现。 检查以查看v1.0的路线图。...有几种安装此用户样式的方法。 带触控笔 推荐的方法; 允许完全自定义自定义功能。 安装 单击安

    帮助:Libreoffice帮助只读镜像-无请求请求

    3. **CSS基础**:学习CSS的基本语法,选择器,盒模型,布局方式(如Flexbox和Grid),以及如何用CSS实现响应式设计。 4. **Markdown或XML文档格式**:LibreOffice的帮助内容可能以Markdown或XML编写,理解这两种...

    vc++ 应用源码包_6

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_5

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    《精通direct3d图形及动画程序设计》附书源代码

    演示几种常用的多层纹理颜色混合方式。程序运行时通过按下键盘上的“1”~ “6”数字键可以在不同的颜色混合方式之间进行切换。 3、TexAlphaBlend 演示纹理Alpha混合的使用。 4、TexCoorGenerate 演示纹理坐标自动...

    Typecho简单的BearSimple主题模板

    一款简洁大方的Typecho简单的BearSimple主题模板,总体参考默认模板修改。...多种头像调用方式(Gravatar多种镜像源可供切换、自定义头像、支持QQ头像) 支持代码高亮,拥有多种样式可供选择 多种文章展现样式可供选

    VB写的APNG动画控件

    综上所述,这个VB编写的APNG动画控件为开发者提供了一种简便的方式来集成动态图形到他们的应用程序中,尤其是对于那些仍然使用VB进行开发的项目来说,这是一个极具价值的工具。通过深入理解和利用这些源代码和类文件...

    完美RTF文本预览打印的源代码

    RTF(Rich Text Format)是一种常见的文本格式,用于存储格式化的文本,包括字体、颜色、大小、对齐方式等信息。在IT行业中,预览打印是软件开发中的一个重要环节,它允许用户在实际打印之前查看文档的外观。"完美...

    79种CAD应用技巧

    如果在CAD中遇到文本显示为乱码的情况,原因可能有以下几点:一是没有使用正确的字体文件(如HZTXT.SHX),二是字体文件没有放置在AutoCAD的`Fonts`文件夹内,三是使用了不兼容的字体。解决这些问题的方法是在“选项...

    visual studio 2010 安装

    安装可以通过以下几种方式完成: - **刻录光盘**:将ISO文件刻录到CD/DVD上,然后通过光驱进行安装。 - **虚拟光驱**:使用虚拟光驱软件(如DAEMON Tools Lite)加载ISO文件,然后进行安装。 - **直接解压**:对于...

Global site tag (gtag.js) - Google Analytics