我正在尝试从本机端访问assets文件夹中的图像文件。现在我可以成功搜索assets文件夹及其子目录,找到我要查找的特定文件:
AAssetDir* assetDir = AAssetManager_openDir(asset_manager, "images");
const char* filename;
while ((filename = AAssetDir_getNextFileName(assetDir)) != NULL)
{
__android_log_print(ANDROID_LOG_DEBUG, "Debug", filename);
}
AAssetDir_close(assetDir);
我也在使用OSG。我使用以下代码将图像设置为我的着色器:
texture->setImage(osgDB::readImageFile(fileNameWithPath));
但是该文件名必须包含绝对路径,因为它不在同一目录中。但是我发现我无法获得资产目录的绝对路径,因为它与APK一起被压缩。
由于我无法访问绝对路径,我可以使用其他方式来获取图像?另外需要注意的是,我确实希望将资产文件夹中的文件保存为sd卡。
答案 0 :(得分:30)
您可以使用AAssetManager_open
& AAsset_read
,但由于资产位于apk中,因此无法获取文件路径名称 - 它也会在那里进行压缩。您可以将数据保存到文件中并稍后从该文件中读取,或者如果OSG允许,您可以直接处理从资产文件中获取的块。
来自here:
AAssetDir* assetDir = AAssetManager_openDir(mgr, "");
const char* filename = (const char*)NULL;
while ((filename = AAssetDir_getNextFileName(assetDir)) != NULL) {
AAsset* asset = AAssetManager_open(mgr, filename, AASSET_MODE_STREAMING);
char buf[BUFSIZ];
int nb_read = 0;
FILE* out = fopen(filename, "w");
while ((nb_read = AAsset_read(asset, buf, BUFSIZ)) > 0)
fwrite(buf, nb_read, 1, out);
fclose(out);
AAsset_close(asset);
}
AAssetDir_close(assetDir);