2017-08-21 3 views
3

この画像を画像処理に使用するために、画像のパスをC++ファイルに渡そうとしていますが、今は処理できません。私のMainActivity Iそのようなパスを取得:NDKプロジェクト用にアンドロイドスタジオの画像の絶対パスを取得

Uri path; 
    String pathS; 
    path = Uri.parse("android.resource://com.sfarbac.rtmatching/" + R.drawable.elli); 
    pathS = path .toString(); 

を、私はCにそのよう++ファイルこのパスを渡さ:私はそのようにネイティブコードからのパス情報を取得

nativeClass.detectAndMatch(_mRgba.getNativeObjAddr(), _trick.getNativeObjAddr(), pathS); 

を:

JNIEXPORT jint JNICALL 
Java_com_sfarbac_rtmatching_nativeClass_detectAndMatch 
(JNIEnv *env, jclass obj, jlong addrRgba, jlong addrTrick, jstring path){ 

Mat& camPic = *(Mat*)addrRgba; 
Mat& camTric = *(Mat*)addrTrick; 

const jsize len = env->GetStringUTFLength(path); 
const char* strChars = env->GetStringUTFChars(path, (jboolean *)0); 
string Result(strChars, len); 

camTric = imread (Result.c_str(), CV_LOAD_IMAGE_GRAYSCALE); 
if(! camTric.data) 
{ 
    __android_log_print(ANDROID_LOG_ERROR, "TRACKERS", "%s", "Can not load image"); 
    //return -1; 
} 
//cvtColor(camTric, camPic, CV_RGBA2GRAY); 
env->ReleaseStringUTFChars(path, strChars); 

return 1; 

}

ここに画像を読み込むことができません。 「画像を読み込めません」というエラーが表示されます。 アセットフォルダに画像を置くと、画像がapkファイルに配置されているため、画像が見つからないことがわかります。この問題を乗り越えるにはどうすればいいですか?ありがとう。

答えて

3

リソースとアセットは、開発マシンのファイルです。それらはデバイス上のファイルではありません。

私は、ユーザが自分のデバイスで画像処理をプレコンパイル済みの画像で実行することが有用であるとはっきりしていません。あなたの開発マシン上など、他の場所でそれを行う方が理にかなっているようです。または、事前にコンパイルされたものとは対照的に、ユーザーから来た画像に対して画像処理を実行します。言われていること

、次のいずれか

  • あなたのファイルへのリソースや資産のバイトをJavaのInputStreamで作業できるようにするには、あなたのC++コードを適応させる、または

  • コピーコントロール(例:getCacheDir())、そのファイルへのパスをC++コードで使用する

関連する問題