获取位于安卓工作室中可绘制的图像的绝对路径,用于NDK项目



我正在尝试将图像的路径传递给我的c ++文件,以便将此图像用于图像处理,但我现在无法处理它。在我的主活动中,我得到这样的路径:

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++代码以便能够使用 JavaInputStream,或者

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

最新更新