美文网首页
跨平台字体渲染

跨平台字体渲染

作者: hjm1fb | 来源:发表于2020-02-20 21:21 被阅读0次

    借鉴的文章:

    Skia深入分析5——skia文字绘制的实现
    Android's Font Renderer Efficient text rendering with OpenGL ES
    万万没想到——flutter这样外接纹理
    Text Rendering
    flutter/engine/third_party/txt/src
    hwui/FontRenderer.cpp
    hwui/pipeline/skia/LayerDrawable
    FreeTypeLibAndroidJNIDemo
    Skia实现的Lottie播放器
    libgdx/wiki/Bitmap-fonts
    snada/BitmapFontLoader
    aosp/libs/hwui/FontRenderer.cpp
    https://github.com/libgdx/libgdx/issues/5825
    使用CMake交叉编译Skia(下载Demo后,仍需按照文章完成编译)

    -矢量文字SDF
    libgdx/wiki/Distance-field-fonts
    Playing around with distance field font rendering
    multi-channel distance field

    最后还是选择各个平台的原生API画,比如安卓用的是Canvas DrawText的API:
    然后绘制文字参考了以下文章:
    HenCoder Android 开发进阶:自定义 View 1-3 文字的绘制
    HenCoder Android 开发进阶: 自定义 View 1-2 Paint 详解

    文字测量:
    Android: Measure Text Height on a Canvas
    Measuring text height to be drawn on Canvas ( Android )
    查看字体工具 FontLab 7

    Android TextView的换行策略
    Android换行调试tip:
    Painter.measureText()打印的字宽和字号不是完全成正比(即使是画单个字符也不会成正比),比如0.6555倍的字号, kerning为0Painter.measureText()的值会是0.650倍。这样就会导致换行在某些情况下有差异: 文本框2440.6555 = 160; 字号 218.42773 0.6555 = 143.2 字宽246*0.654 = 160; 所以之前换行的转换后不换行了
    Painter的textSize设置为142/143/144, measureText("FF")的值都是160.0。设置为148后未166.0,有时候小数位有值,即变化非线性。所以建议在APP层把文字换行,用增加了换行符后的文本替换本来的文本。

    相关文章

      网友评论

          本文标题:跨平台字体渲染

          本文链接:https://www.haomeiwen.com/subject/llufqhtx.html