gpt4 book ai didi

android - Freetype FT_Request_Size() 在 Android 上崩溃

转载 作者:行者123 更新时间:2023-11-30 04:10:59 27 4
gpt4 key购买 nike

我已经在 android 上编译了 freetype 2.4.2,每当我尝试使用 FT_Set_Char_Size() 时,它都会在 FT_Request_Size() 函数的 ftobjs.c 文件中的这一行崩溃

error = clazz->request_size( face->size, req );    //line 2832

我的代码在 Windows、Linux、Mac、iPhone 和 iPad 上运行良好。但这是交易。在我使用/Za“禁用语言扩展”编译 freetype 之前,我遇到了完全相同的问题,在 Windows (vc++) 的相同位置发生了相同的崩溃。

所以我很确定是 freetype 在 Android 上的编译方式导致了崩溃。我查找了如何在 Android 上禁用语言扩展,但无济于事。

这是我的 freetype 的 Android.mk 文件

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/builds \
$(LOCAL_PATH)/include

LOCAL_SRC_FILES:= \
src/base/ftbbox.c \
src/base/ftbitmap.c \
src/base/ftglyph.c \
src/base/ftstroke.c \
src/base/ftxf86.c \
src/base/ftbase.c \
src/base/ftsystem.c \
src/base/ftinit.c \
src/base/ftgasp.c \
src/raster/raster.c \
src/sfnt/sfnt.c \
src/smooth/smooth.c \
src/autofit/autofit.c \
src/truetype/truetype.c \
src/cff/cff.c \
src/psnames/psnames.c \
src/pshinter/pshinter.c \
src/type1/type1.c \
src/cid/type1cid.c \
src/pfr/pfr.c \
src/type42/type42.c \
src/winfonts/winfnt.c \
src/pcf/pcf.c \
src/psaux/psaux.c \
src/bdf/bdf.c \
src/gzip/ftgzip.c \
src/lzw/ftlzw.c

LOCAL_CFLAGS += -DFT2_BUILD_LIBRARY
LOCAL_MODULE := freetype
LOCAL_LDLIBS := -ldl -llog

include $(BUILD_STATIC_LIBRARY)

我的完整项目可以在这里找到

    http://digitalknob.googlecode.com

它编译得很好,我没有收到任何错误。只是当我使用 FT_Set_Char_Size() 时崩溃。现在让我发疯了几天:P 非常感谢任何帮助。

最佳答案

答案在这里。事实证明,问题一直是从 .apk 文件中加载字体文件,因为它在技术上是压缩的。使用 SDL,我们使用 SDL_RWops 将字体文件加载到 .apk 文件的 Assets 文件夹中。我们使用 ftgles 将字体文件加载到 OpenGLES 中。完整示例可在 www.digitalknob.com 找到

SDL_RWops *file = SDL_RWFromFile(filename, "rb"); 

unsigned long fileLen;
SDL_RWseek(file,0,SEEK_END);
fileLen=SDL_RWtell(file);
SDL_RWseek(file,0,SEEK_SET);

//Allocate memory
buffer=(unsigned char *)malloc(fileLen+1);
if (!buffer){
printf("Memory error!\n");
SDL_RWclose(file);
return;
}

//Read file contents into buffer
SDL_RWread(file, buffer, fileLen, 1);
SDL_RWclose(file);

texture_font = new FTGLTextureFont(buffer, fileLen);
texture_font->FaceSize(18);

//don't forget to free your buffer later.
//free(buffer);

如果您不使用 SDL,则需要 zlib 或其他工具来访问字体文件。

关于android - Freetype FT_Request_Size() 在 Android 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com