【问题标题】:Non-uniform text scaling in Skia (FreeType 2 back-end)Skia 中的非均匀文本缩放(FreeType 2 后端)
【发布时间】:2018-02-28 02:47:19
【问题描述】:

我的问题是,在应用于 Skia 画布的平滑缩放期间(使用concat 方法),文本似乎以“突突”的方式不均匀地缩放。该问题在具有 FreeType 2 后端的 Android 平台上尤为明显。

我相信这就是 Skia 中一般文本缩放的工作原理 - 首先将文本大小应用于字体引擎,然后提取字形位图并使用“剩余”矩阵对其进行转换以达到所需的最终大小。但是不知何故,最终的剩余缩放没有应用,这导致在文本大小的整数值之间的转换中出现这种突增。与纯 Java/Android 画布相同的东西似乎无可挑剔地工作(文本平滑缩放)。

我的问题是如何解决这种行为?也许我可以调整一些构建配置标志,也许是 SkPaint 运行时标志?

Skia 修订版为m59

【问题讨论】:

    标签: android c++ freetype2 skia


    【解决方案1】:

    我不了解 Skia,但通常当我看到缩放文本的这种行为时,这是因为您将缩放浮点数转换为 int。

    float scale = someValue;
    int someOtherVar = scale;
    ... some scaling math on someOtherVar...
    text.setScale(someOtherVar)
    

    这将导致所描述的行为

    在最后一步之前,切勿将任何缩放变量转换为 int。

    【讨论】:

    • 谢谢。这绝对不是这里的情况,因为画布上的任何其他几何图形都可以正确平滑地缩放。而且我不会对文本或其他内容应用任何额外的比例。
    【解决方案2】:

    绘制文字时,尝试设置Paint.isLinearText。这会导致 Skia 在应用转换之前将文本渲染到路径。我的测试表明,这会导致缩放变得平滑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-19
      • 2022-12-17
      • 1970-01-01
      • 2013-04-22
      • 2019-05-16
      • 2012-11-03
      • 2019-09-17
      • 1970-01-01
      相关资源
      最近更新 更多