网站首页
手机版

最火免费手机字体软件(免费主题字体软件)

更新时间:2024-01-24 00:07:27作者:未知

最火免费手机字体软件(免费主题字体软件)

OSG默认只能显示英文和数字字符,如果想显示汉字的话必须加载中文字库,目前OSG只支持TTF格式的字库。

添加FreeType插件库

首先在Android.mk文件里添加对FreeType库的支持,找到LOCAL_LDFLAGS项并在最后添加以下两行:

LOCAL_LDFLAGS := -L $(LIBDIR) ...-l$(OSG_ANDROID_DIR)/lib/osgPlugins-3.6.5/libosgdb_freetype.a -l$(OSG_ANDROID_DIR)/obj/local/armeabi-v7a/libft2.a

然后在找在OsgMainApp.hpp里添加插件:

USE_OSGPLUGIN(freetype)

在项目中设置TTF字库文件

先从网上下载或从Windows里复制一份TTF文件到项目的assets目录下。然后在运行时将此文件复制到项目所在的内部存储的路径下,并把路径通过NDK传给OSG,以便于OSG通过C++代码加载字体文件。

在osgNativeLib.java最后添加:

public static native void setLocalFont(String fontName);

在MainActivity里实现字体文件的复制功能

private val fontName = "fangsong_GB2312.ttf"private val fontFile by lazy { filesDir.path + File.separator + fontName }private fun checkLocalFont() { if (!File(fontFile).exists()) { try { val fis = resources.assets.open("font/$fontName") fis.copyTo(FileOutputStream(fontFile), 1024 * 6) } catch (e: IOException) { e.printStackTrace() } }}override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... checkLocalFont() ... //建议在OSG初始化完成后调用 osgNativeLib.setLocalFont(fontFile)}

上述代码是在Android层面拿到字体位于项目所在的路径,现在需要把这个路径传给osgNativeLib.cpp

...JNIEXPORT void JNICALLJava_osg_AndroidExample_osgNativeLib_setLocalFont(JNIEnv *env, jobject obj, jstring fontName);...extern "C" JNIEXPORT void JNICALLJava_osg_AndroidExample_osgNativeLib_setLocalFont(JNIEnv *env, jobject obj, jstring fontName) { const char *lfont = env->GetStringUTFChars(fontName, JNI_FALSE); mainApp.setLocalFont(std::string(lfont)); //Release Strings to JNI env->ReleaseStringUTFChars(fontName, lfont);}

由于NDK只支持C语言的语法,所以osgNativeLib还要再二传手,把路径传给OsgMainApp,一般来说这个文件才是我们OSG的起始文件。

// OsgMainApp.hppvoid addText(const std::string & font);//OsgMainApp.cppvoid OsgMainApp::addText(const std::string & font) { setlocale(LC_ALL, ".936"); //等价setlocale(LC_ALL, "chs"); std::string str = "OSG for android 中文显示示例"; osg::ref_ptr<osgText::Text> text = new osgText::Text; osg::ref_ptr<osgText::Font> fontHz = osgText::readRefFontFile(font); text->setFont(fontHz); text->setText(str, osgText::String::ENCODING_UTF8); text->setCharacterSize(40.0f); text->setPosition(osg::Vec3( 0.0, 0.0, 0.0f)); text->setAutoRotateToScreen( true); root->addChild(text);}

readRefFontFile就是读取字体文件并返回一个字体类型的指针,然后通过setFont设置这个字体指针,如果我们没有在项目中引入FreeType的插件库的话,readRefFontFile就直接返回一个null。
如果不需要操作字体指针的话可以直接在setFont指定字体文件的路径,这样代码更简洁些。

实际效果

ps:【项目】淘宝项目邀请用户即可获取收益

ps:【活动】支付宝大额红包点击扫码领取

ps:【本站主题】自适应资讯类的网站主题

本文标签: [db:关键词]  

为您推荐

设计类最吃香的专业 美术生最吃香的专业

一,工业设计(Industrial Design)梗概工业设计分为产品设计、环境设计、传播设计、设计管理4类;包括造型设计、机械设计、服装设计、环境规划、室内设计、UI设计、平面设计、包装设计、广告设

2024-01-24 00:07

信用污点(信用污点怎么消除)

现在的生活、工作节奏越来越快,在以往的生活中如果有办理信用卡,办的时候很忐忑,用的时候很开心,但是往往还的时候,就记不起来了。但是,信用卡是接入了央行征信系统的,无论是小额,几块钱,还是大额,都会反映

2024-01-24 00:07

最火免费手机字体软件(免费主题字体软件)

OSG默认只能显示英文和数字字符,如果想显示汉字的话必须加载中文字库,目前OSG只支持TTF格式的字库。添加FreeType插件库首先在Android.mk文件里添加对FreeType库的支持,找到L

2024-01-24 00:07

诺基亚最新款手机(诺基亚最新款手机壁纸)

诺基亚C2 Android Go Edition价格:暂无价格上市时间:2020年03月 屏幕尺寸:5.7英寸分辨率:1520×720触摸屏类型:电容触摸屏,多点触控CPU型号:紫光展锐SC9832

2024-01-24 00:06

一千万放余额宝 一千万放余额宝一天多少钱

将1000万存余额宝能拿多少钱,网友:想都不敢想,怕了都说科技和创新是进步的动力,而如今随着科技的快速进步,我们的生活自然也是变得多姿多彩。 要是在零几年的时候,出门玩少了不了要带一些钱,要是带的面额

2024-01-24 00:06

车险一年大概多少钱 车险一年大概多少钱合适

日产轩逸,国内轿车市场最畅销的一辆车,预算在12万左右的车主一般都会考虑到这款车型,那么买它之前你知道它一年的养车费用需要多少吗?下面我就从油费、保养、车险等方面简单地帮大家算一算。 首先是油费日产轩

2024-01-24 00:06