JNIEXPORT: ошибка компиляции getIplImageFromIntArray - PullRequest
0 голосов
/ 22 марта 2012

Я хочу сделать снимок на моем Samsung GT-P1000, затем отредактировать это изображение с помощью некоторых функций OpenCV и снова отобразить его на планшете. Я пытаюсь редактировать образец с этого сайта: http://www.stanford.edu/~zxwang/android_opencv.html

Однако я изменил abit проекта и использую 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 или еще что-нибудь? Я пытался гуглить с '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 голосов
/ 22 марта 2012

вы просто должны знать, как использовать jni.код в порядке.когда вы используете этот код jni в своем проекте, вы должны изменить имя функции jni.Функции jni должны иметь префикс, такой как Java_com_your_package_function.

замена edu_stanford_android на com_your_package решит вашу проблему

...