40

ネイティブ側から 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 カードと同じように、アセット フォルダーにファイルを保持したいことにも注意してください。

4

2 に答える 2

38

AAssetManager_open&を使用してアセットから画像を読み取ることができますAAsset_readが、アセットは apk にあるため、そのファイル パス名を取得できません。そこでも圧縮されます。データをファイルに保存して後でそのファイルから読み取ることも、OSG が許可する場合はアセット ファイルから取得したチャンクを直接処理することもできます。

ここから:

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);
于 2012-11-09T23:43:15.353 に答える