0

问题

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

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

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

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

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

问题

我最初的方法是只针对 Windows 并使用 C++ 和 MFC。但这些都是非常古老的技术,虽然可能仍然可以解决问题,但我想问什么是更现代的方法。以下是我探索过的选项:

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

1 回答 1

0

你的目标是什么?用于桌面/移动应用程序或网络的字体渲染引擎?当然,您可以同时开发两者,这没有问题。如果你把代码架构得好,你可以拥有三个部分:核心引擎、桌面平台界面和 Web 平台界面。前者将同时用 C++ 和 javascript 编写,而这些几乎是 1:1 的重新实现,可能是从 C++ 的子集生成的 js 机器。平台接口将分别用 C++ 和 javascript 编写。

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

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

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

于 2014-07-01T12:23:01.457 回答