VS2022编译freetype库

Posted QQVQQ...

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2022编译freetype库相关的知识,希望对你有一定的参考价值。

一、前言

FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。
支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。

二、下载源代码

源代码下载地址:https://freetype.org/download.html
此处也给出了已编译好的二进制版本:https://github.com/ubawurinna/freetype-windows-binaries

三、编译freetype

Step1 解压下载好的源文件

step2 打开VS解决方案

文件路径为:\\freetype-2.10.0\\freetype-2.10.0\\builds\\windows\\vc2010\\freetype.sln

ste

安卓平台文字叠加库freetype的编译

freetype是一款跨平台开源的文字叠加库,支持对图像,视频进行文字叠加.

做多媒体开发的小伙伴大概都知道文字叠加是个刚需.所以最近研究了一下freetype库在安卓平台的编译过程.

下载

freetype 可在https://freetype.org/download.html下载,目前最新版本是2.11.1.

配置

freetype是一个标准的GNU Autotools生成的项目.其原理是:1 使用configure生成Makefile,2 make. 我们这里要做的就是修改configure的输出参数,来适配到安卓平台.

我借鉴了一些第三方的配置项目,创建了build_android.sh脚本,过程略过,内容如下.
具体见freetype-2.11.1/build_android.sh:

#!/bin/bash

FFMPEG_EXT_PATH=`pwd`
NDK_PATH="/Users/pro21/Downloads/android-ndk-r21e/"
HOST_PLATFORM="darwin-x86_64"
ENABLED_DECODERS=("$@:4")
JOBS=$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)
echo "Using $JOBS jobs for make"

COMMON_OPTIONS="
    --with-zlib=no
    --with-bzip2=no
    --with-png=no
    --with-harfbuzz=no
    --with-brotli=no
    --with-sysroot=$SYSROOT
    "
TOOLCHAIN_PREFIX="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/bin"
SYSROOT="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/sysroot"

cd "$FFMPEG_EXT_PATH"
make clean
FOLDER=`pwd`/android-libs/armeabi-v7a
mkdir -p $FOLDER
CC=$TOOLCHAIN_PREFIX/armv7a-linux-androideabi16-clang \\

./configure \\
    --prefix=$FOLDER \\
    --libdir=$FOLDER \\
    --host=arm-linux-androideabi \\
    --enable-neon  --enable-thumb --disable-gpl --disable-nonfree --enable-runtime-cpudetect \\
    $COMMON_OPTIONS
make -j$JOBS && make install

make clean

FOLDER=`pwd`/android-libs/arm64-v8a
mkdir -p $FOLDER
CC=$TOOLCHAIN_PREFIX/aarch64-linux-android21-clang \\
./configure \\
    --prefix=$FOLDER \\
    --libdir=$FOLDER \\
    --host=aarch64-linux-android \\
    --enable-debug \\
    $COMMON_OPTIONS
make -j$JOBS && make install

make clean
FOLDER=`pwd`/android-libs/x86
mkdir -p $FOLDER
CC=$TOOLCHAIN_PREFIX/i686-linux-android16-clang \\
./configure \\
    --prefix=$FOLDER \\
    --libdir=$FOLDER \\
    --host=i686-linux-android \\
    $COMMON_OPTIONS
make -j$JOBS && make install

编译

cdfreetype-2.11.1,更改build_android.sh里面的NDK环境为自己的编译环境,包括NDK_PATHHOST_PLATFORM,然后执行:

sh build_android.sh

编译成功后,动态库位于android-libs目录.

编译Android JNI

  • cd 到 android/library/freetype_jni
  • 执行 ndk-build

测试项目

通过AS打开安卓项目,执行测试代码:
android/library/src/androidTest/java/com/tsinglink/android/library/TextDrawTest.kt

安卓端接口调用

// 创建 TextDraw 实例
val draw = TextDraw()
// 设置字库,文字大小,旋转角度:
draw.init("/system/fonts/NotoSansCJK-Regular.ttc",20,0.0f)
// 在20,120处叠加文字. frame为叠加的图像帧,YUV格式.width,height表示图像帧的宽高
// draw方法可以多次调用.
draw.draw("你好 hello ", 20, 120, frame, width, height)
// 释放实例
draw.release()

叠加效果展示

draw.draw("""Log.i(TAG,"你好 hello ")""", 20, 30, frame, width, height)
draw.draw("""Log.i(TAG,"こんにちは hello ")""", 20, 60, frame, width, height)

draw.draw("你好 hello ", 20, 120, frame, width, height)
draw.draw("こんにちは hello ", 20, 150, frame, width, height)


项目地址

https://github.com/tsinglink/android-freetype

以上是关于VS2022编译freetype库的主要内容,如果未能解决你的问题,请参考以下文章

Windows环境下增加c/c++编译堆栈空间的方法(CMD,DEV,CLion,VS2022)

freetype 2.11.0必须使用VS2012编译

如何从 MS VS 中的大量 .c 和 .h 文件编译静态库

vs2022编译libcurl

安卓平台文字叠加库freetype的编译

安卓平台文字叠加库freetype的编译