2012-03-22 6 views
0

私は自分のSamsung GT-P1000で写真を撮りたいと思っています。この写真をいくつかのOpenCV関数で編集し、再びタブレットに表示します。私はこのウェブサイトからサンプルを編集しようとしている:http://www.stanford.edu/~zxwang/android_opencv.htmlJNIEXPORT:getIplImageFromIntArrayコンパイルエラー

を私はプロジェクトのABITを変更したと私が使用しているサンプルプロジェクトはJNIEXPORT JNICALLを使用しています2.3.1

if(requestCode == ACTIVITY_SELECT_IMAGE && resultCode == RESULT_OK) 
{ 
    try 
{ 
    Uri currImageURI = data.getData(); 
    String[] proj = {Images.Media.DATA, Images.Media.ORIENTATION}; 
    Cursor cursor = managedQuery(currImageURI, proj, null, null, null); 
    int columnIndex = cursor.getColumnIndex(proj[0]); 
    cursor.moveToFirst(); 
    mCurrentImagePath = cursor.getString(columnIndex); 

    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentImagePath); 
    Log.i(TAG, mCurrentImagePath); 
    int width = bitmap.getWidth(); 
    int height = bitmap.getHeight(); 
    int[] pixels = new int[width * height]; 
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height); 
    opencv.setSourceImage(pixels, width, height); 
    ...... 
    <some more irrelevant Java code> 
    .... 

のOpenCVを使用していますがビットマップをIplImageとしてロードして、OpenCVで編集できるようにします。コードは以下の通りです。しかし、私はすべてのことをコンパイルするためにndk-buildを使用しようとすると、エラーが発生します:../jni_part.cpp:28: 'getIplImageFromIntArray'への未定義参照。これは、私の.cppファイルや他のファイルの読み込みが行えないということですか?私は 'getIplImageFromIntArray'でgoogleしようとしましたが、助けを見つけることができません。誰かが間違っていることを私に説明することはできますか?

#ifdef __cplusplus 
extern "C" 
{ 
    #endif 

IplImage * pImage = NULL 
IplImage * loadpixels(int * pixels, int width, int height); 
IplImage * getIplImageFromIntArray 
    (JNIEnv* env, jintArray array_data, jint width, jint height); 

JNIEXPORT jboolean JNICALL Java_org_opencv_example_pruts_Test1OpenCV_setSourceImage 
    (JNIEnv * env, jobject thiz, jintArray photo_data, jint width, jint height) 
{ 
    if(pImage != NULL) 
    { 
     cvReleaseImage(&pImage); 
     pImage = NULL; 
    } 
    pImage = getIplImageFromIntArray(env, photo_data, width, height); 

     if(pImage == 0) 
    { 
     return 0; 
    } 

    return 1; 
} 

答えて

0

あなたはちょうどjniの使い方を知っている必要があります。 コードは大丈夫です。 これらのjniコードをプロジェクトで使用する場合は、jni関数の名前を変更する必要があります。 jni関数は、Java_com_your_package_functionのような接頭辞を持つ必要があります。

は、私が誤って私が今追加した.cppファイル内のコードの1行を逃した

+0

あなたの問題を解決しますcom_your_packageでedu_stanford_android交換してください。しかし、あなたが言及したこの接頭辞で、私は私の質問で述べたのと同じエラーをまだ得ています。この問題に対して別の提案がありますか? – pimmes111