获取其位于绘制在Android Studio中的NDK项目图像的绝对路径

问题描述:

我试图通过图片到我的C++文件的路径使用此图片的图像处理,但我不能处理它只是now.In我MainActivity我得到这样的路径:获取其位于绘制在Android Studio中的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文件。我如何克服这个问题。谢谢。

资源和资产都在开发机器上的文件。它们不是设备上的文件。

我不清楚为什么它会以预编译的图像上的他们的设备上进行图像处理是对用户有用的。在别的地方做这件事似乎更有意义,比如在你的开发机器上。或者,对来自用户的图像执行图像处理,而不是预先编制的图像。

话虽这么说,无论是:

  • 适应你的C++代码能够与Java InputStream工作,或

  • 复制的资源或资产,以一个文件的字节,你控制(例如,在getCacheDir()),然后使用该路径与您的C++代码,文件