用于复杂字体渲染引擎的Web vs Desktop

时间:2014-07-01 11:33:52

标签: qt visual-c++ web-applications gdi directwrite

问题

我希望为乌尔都语开发一个小型桌面出版应用程序。这是一种从右到左的语言,但排版可能非常复杂。

简化版可以使用Unicode字体,这是BBC在这里使用的方法: http://www.bbc.co.uk/urdu

然而,Unicode方法实质上是强制所有字母牢固地位于共同基线上并具有相同的字母高度。文字看起来更像阿拉伯语,这对商业文件来说是可以接受的,但乌尔都语的美丽在于其自由形式的书法风格。这里可以看到一个例子:

http://upload.wikimedia.org/wikipedia/commons/9/94/Urdu_couplet.svg

我希望编写一个乌尔都语字体渲染引擎,它可以在书法风格中渲染Unicode Urdu文本。创建一个单独的字体文件(假设大约18,000个字母字形组合适合它)将不能完全解决问题。例如,我想增加“字距”(字母间距),这需要流畅地延伸连接字母的线条,同时保持平滑的曲线。

问题

我最初的方法是仅针对Windows并使用C ++和MFC。但这些都是非常古老的技术,尽管我可能会解决这个问题,但我想问一下更现代的方法。以下是我探讨的选项:

  • 由于字体渲染是一种低级活动,大概是C#/ WPF不合适
  • 我想避免仅针对Windows,因此C ++ / Qt可能是一个选项
  • 鉴于云计算趋势,理想的情况是通过浏览器进行部署,但我认为不可能获得一致的体验。然后,我还没有正确地探索GDI和DirectWrite
  • 也许某些东西可以从DirectX / OpenGL游戏中利用

1 个答案:

答案 0 :(得分:0)

你的目标是什么?用于桌面/移动应用程序或Web的字体呈现引擎?当然,您可以开发两者,这没有问题。如果您很好地构建代码,则可以包含三个部分:核心引擎,桌面平台接口和Web平台接口。前者将用C ++和javascript编写,这些可能几乎是1:1的重新实现,也许是从C ++子集生成的js机器。平台接口将分别用C ++和javascript编写。

平台界面中最关心的是用于渲染(描边)字体的API。 Qt的GUI模块提供了一个QPainterPath,可以很好地解决这个问题。开罗是另一个运作良好的图书馆。 Qt的好处在于它为您提供了许多其他跨平台的好东西。使用渲染器的应用程序根本不必基于Qt,您实际上可以将Qt的核心和gui模块静态链接到您的库,使其完全透明。

WPF“喜欢”Qt Quick 2,而MFC“喜欢”Qt Widgets - 只是解决不同问题的方法。您不是设计用户界面,而只是设计渲染库。您需要2D路径描边和几何支持,而不是用户界面框架。 Qt的模块化对您来说是一个很好的资产:只使用您需要的模块。

使用JavaScript,您将使用某种HTML5画布元素。所有特定于字体的东西都必须从头开始实现。 HTML5不允许你插入字体渲染引擎,你只是简单地绘制图片并且必须处理复制粘贴等等。因为你必须解决所有麻烦,所以没有必要涉及DirectWrite,因为你我们必须从头开始实施。当然,您可以自行决定在服务器端与客户端之间完成多少字体解码。服务器端可以使用Qt - 它是一个相当强大的服务器开发平台。如果您一直在使用信用卡,那么您的一些交易很可能是通过Qt中编码的后端进行的:)