s.d*_*s.d 22 java unicode macos rendering ligature
我试图在Mac OS X 10.6上正确渲染Devanagari连字(在Unicode字符串中).
字符串在a上绘制JComponent
并RenderingHints
用于抗锯齿.连字在Windows XP SP2和7以及Ubuntu中正确显示,但在Mac OS X中,连字被分解(或者更确切地说,没有正确合并),变音符被移离其位置等等(参见下面的截图,正确的渲染示例来自左侧的Win XP SP2(使用RenderingHints
Antialiasing键ON
),右侧的Mac OS X 10.6.7中的错误渲染示例(Antialising DEFAULT
= OFF
).
我已将字体设置如下,因此它应该在任何系统上使用默认字体:
new Font(null,Font.PLAIN,20);
Run Code Online (Sandbox Code Playgroud)
我相信所有这些可能与Macs上的默认字符编码是MacRoman(不是UTF-8子集)以及其他系统(如Windows)使用UTF-8子集(例如WinLatin-1)这一事实有关. )或cp1252等.
即使掌握了这些信息,我也不知道如何处理这个问题.因此,如果有人能指出我正确的方向,我将非常感激.
我已经尝试了很多东西:
TextAttribute
LIGATURES_ON
没有解决问题我非常感谢任何提示或其他开发人员的代码片段(最好是在Mac上开发的印地语背景).
我自己不是专家,但这里有一些指示.据我所知,维基百科,问题很可能是你的字体.提前为长引号道歉,但我可能只是链接了两篇维基百科的文章.
这里,关于剖面的部分连字从Unicode的文章:
连字
许多脚本,包括阿拉伯语和梵文,都有特殊的拼写规则,要求将某些字母组合组合成特殊的连字形式.管理连接形成的规则可能非常复杂,需要特殊的脚本整形技术,例如ACE(1980年代由DecoType制作的阿拉伯语书法引擎,并用于生成Unicode标准的印刷版中的所有阿拉伯语示例),这成为证明OpenType(由Adobe和Microsoft),Graphite(由SIL International提供)或AAT(由Apple提供)的概念.
在AAT(Apple高级版式)文章中进一步阅读,揭示了以下信息.我建议阅读整篇文章.
Mac OS X中的AAT和OpenType
从Mac OS X 10.5 Leopard开始,可以获得对OpenType的部分支持.该支持目前仅限于西方文字和阿拉伯文(截至2011年).如果字体具有AAT表,则它们将用于排版.如果字体没有AAT表但具有OpenType表,则它们将在系统支持的范围内使用.
这意味着可以在Mac OS X 10.5上无需修改即可使用西方或中东脚本的许多OpenType字体,但泰国和梵文等南亚脚本则不能.这些需要AAT表才能正确布局.
稍后在关于字体布局的部分中:
由于AAT完全使用字形并且从不使用字符,因此生成正确显示所需的所有布局信息都位于字体本身内.这允许为新脚本添加字体,而无需OS的任何特定支持.
最后:
印度语脚本的AAT
对于印度语脚本,唯一需要的功能是字形重新排序和替换.AAT支持这两种方式.如上所述,用于印度语脚本的OpenType字体需要在Mac OS X上正常运行之前添加AAT表.但是,请注意,这仅适用于依赖于OpenType系统支持的软件.提供自己的OpenType实现的程序将使用OpenType字体正确呈现Document.(但是,它们可能无法正确呈现带有AAT表的印度字体.)
Mac OS X 10.5附带了Devanagari,Gurmukhi,Gujarati,Thai,Tibetan和Tamil的字体.其他印度语脚本的字体可从第三方获得.
也许您需要选择明确支持梵文的字体.
使用 Quartz 渲染器而不是 Java 2D 渲染器。
这对字形渲染的质量产生了很大的影响。需要首先按照此处的建议完成此操作。
if (System.getProperty("os.name").startsWith("Mac OS X")) {
System.setProperty("apple.awt.graphics.UseQuartz", "true");
}
Run Code Online (Sandbox Code Playgroud)
您也可以考虑使用TextLayout
,因为FontRenderContext
可以应用RenderingHints.KEY_FRACTIONALMETRICS
。
归档时间: |
|
查看次数: |
2204 次 |
最近记录: |