在Android NDK中将字符串传递给C代码
该程序应从SD卡上获取图像并调整其亮度。图像是通过NDK C代码从SD卡获取的。需要注意的是,描述图像路径的字符串通过JNI传递给NDK Java代码:在Android NDK中将字符串传递给C代码,android,c,string,java-native-interface,android-ndk,Android,C,String,Java Native Interface,Android Ndk,该程序应从SD卡上获取图像并调整其亮度。图像是通过NDK C代码从SD卡获取的。需要注意的是,描述图像路径的字符串通过JNI传递给NDK Java代码: private void adjustBrightness() { imagePath = (Environment.getExternalStorageDirectory().getPath()+"earthglobe.jpeg").toCharArray(); brightness(imagePath, brightne
private void adjustBrightness() {
imagePath = (Environment.getExternalStorageDirectory().getPath()+"earthglobe.jpeg").toCharArray();
brightness(imagePath, brightness);
}
public native void brightness(char[] imagePath, float brightness);
NDK代码:
JNIEXPORT void JNICALL Java_com_example_ImageActivity_brightness(JNIEnv * env,char[] bitmappath, jfloat brightnessValue)
{
string bmpath = bitmappath+'\0';
jobject obj = fopen( bitmappath , "rb" );
}
不能以这种方式传递char[] 在Java使用中:
public static native void brightness(String imagePath, float brightness);
在本机使用中:
std::string ConvertJString(JNIEnv* env, jstring str)
{
if ( !str ) std::string();
const jsize len = env->GetStringUTFLength(str);
const char* strChars = env->GetStringUTFChars(str, (jboolean *)0);
std::string Result(strChars, len);
env->ReleaseStringUTFChars(str, strChars);
return Result;
}
JNIEXPORT void JNICALL Java_com_example_ImageActivity_brightness(JNIEnv * env, jobject obj, jstring bitmappath, jfloat brightnessValue)
{
std::string bmpath = ConvertJString( env, bitmappath );
FILE* f = fopen( bmpath.c_str(), "rb" );
// do something useful here
fclose( f );
}
这很可笑:
jobject obj=fopen(位图路径,“rb”)代码>谢谢,我希望位图作为一个作业对象而不是一个文件,因为已经有一个函数从作业对象检索像素。。。有什么方法可以做到这一点吗?使用java.nio.ByteBuffer传递像素。我想你弄错了……要么我想将bmp作为JObject(在NDK中)检索,要么我需要从NDK中的文件获取像素的方法。我并不害羞,这与我的问题相同,但这个解决方案对我不起作用。@wEight std::string