JNIEXPORT:getIplImageFromIntArray编译错误

时间:2012-03-22 12:42:06

标签: android opencv bitmap java-native-interface

我想用三星GT-P1000拍照,然后用一些OpenCV功能编辑这张照片,然后在平板电脑上再次显示。我正在尝试编辑此网站上的示例:http://www.stanford.edu/~zxwang/android_opencv.html

但是我已经改变了项目升技并使用的是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:defigure reference to'getIplImageFromIntArray'。这是否意味着我失踪了我的.cpp文件或其他东西的导入?我尝试使用'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;
}

1 个答案:

答案 0 :(得分:0)

你应该知道如何使用jni。 代码是好的。 当您在项目中使用这些jni代码时,您应该修改jni函数的名称。 jni函数应该有一个像Java_com_your_package_function这样的前缀。

用com_your_package替换edu_stanford_android将解决您的问题