2012-03-22 25 views
0

我想用我的三星GT-P1000拍照,然后用一些OpenCV函数编辑这张照片,并在平板电脑上再次显示它。我试图从本网站编辑示例:http://www.stanford.edu/~zxwang/android_opencv.htmlJNIEXPORT:getIplImageFromIntArray编译错误

但是我已经改变了项目升技和正在使用的OpenCV 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> 
    .... 

我使用的示例项目使用JNIEXPORT JNICALL以IplImage的形式加载位图,因此可以使用OpenCV进行编辑。代码如下所示。但是,当我尝试使用ndk-build来编译整个事情时,我得到一个错误:../jni_part.cpp:28:对'getIplImageFromIntArray'的未定义引用。这是否意味着我错过了我的.cpp文件或so​​methign别的导入?我试图谷歌'getIplImageFromIntArray',但无法找到任何帮助。有人可以向我解释发生了什么事吗?

#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这样的前缀。

与com_your_package取代edu_stanford_android将解决您的问题

+0

我不小心错过了一行代码中,我现在已经添加了.cpp文件。但是,您提到的这个前缀,我仍然遇到了与我的问题中提到的相同的错误。你碰巧有这个问题的另一个建议? – pimmes111 2012-03-23 10:39:42