2012-07-19 12 views
8

Program, SD karttan bir Görüntü çekmeli ve parlaklığını ayarlamalıdır. Ve görüntü SD karttan NDK C-koduyla alınır. Görüntünün yolunu gösteren dizenin, JNI aracılığıyla NDK'ye geçirildiği not edilmelidir.Android'de C koduna bir dize geçirme NDK

Java kodu:

private void adjustBrightness() { 
    imagePath  = (Environment.getExternalStorageDirectory().getPath()+"earthglobe.jpeg").toCharArray(); 
    brightness(imagePath, brightness); 
} 

public native void brightness(char[] imagePath, float brightness); 

NDK kodu:

JNIEXPORT void JNICALL Java_com_example_ImageActivity_brightness(JNIEnv * env,char[] bitmappath, jfloat brightnessValue) 
{ 
    string bmpath = bitmappath+'\0'; 
    jobject obj = fopen(bitmappath , "rb"); 
} 
+0

Bu gülünç: '' jobject obj = fopen (bitmappath, "rb"); '' –

cevap

19

Sen Char [] bu şekilde geçemez. Java'da

kullanın:

public static native void brightness(String imagePath, float brightness); 

yerli kullanımda:

std::string ConvertJString(JNIEnv* env, jstring str) 
{ 
    if (!str) LString(); 

    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); 
} 
+0

Teşekkür İstediğim Bir Jobject olarak bitmap ve bir dosya değil, çünkü zaten Jobject'den pikselleri almak için bir fonksiyon var ... Bunu yapabileceğim herhangi bir yol var mı? –

+0

Pivotları etrafından geçirmek için java.nio.ByteBuffer öğesini kullanın. –

+0

Sanırım yanlış anladınız .... ya bmp'yi JObject (NDK) olarak almak istiyorum ya da NDK'daki dosyadan piksel almak için bir yöntem almam gerekiyor. –