我需要访问 consola.ttf 文件,该文件包含在 Assets 文件夹中,作为文件。
方法1:
尝试使用以下代码作为流访问文件:
AssetManager assets = MainActivity.Context.Assets;
using (var stream = assets.Open("Fonts/consola.ttf"))
{
font = new SdlFont(ToBytes(stream), 15);
}
上面使用的ToBytes方法
static byte[] ToBytes(Stream stream)
{
byte[] b;
using (var ms = new MemoryStream())
{
stream.CopyTo(ms);
ms.Flush();
ms.Position=0;
b = ms.ToArray();
}
return b;
}
我发现here的是不可能的,因为我正在使用“ SDL_ttf”库,该库显然不直接喜欢字节流。
我的SDLFont包装器方法
public SdlFont(byte[] data, int fontSize)
{
Handle = OpenFontRW(OS.RWFromMemory(data, data.Length), 1, fontSize);
}
使用SDLfont方法通过我的包装器调用TTF的此功能:
[DllImport(libTTF, EntryPoint = "TTF_OpenFontRW", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr OpenFontRW(IntPtr src, int freesrc, int ptsize);
此TTF方法记录在here中。使用此方法只会引发未处理的异常并使应用程序崩溃。
方法2:
尝试在运行时中获取路径:
var fontname = "consola.ttf";
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts);
var fontpath = System.IO.Path.Combine(path,fontname);
font = new SdlFont( fontpath , 15);
以下是它们在运行时的值:
这也不起作用。
一个替代解决方案是从系统本身访问我不包含的任何字体文件(.ttf)。但是,能够使用我自己的字体将是更好的选择。
如果有人知道我如何在Android中访问System字体的路径,那对我也将有用。
谢谢。