Я пытаюсь нарисовать фигуру, используя библиотеку OpenCV в собственном коде (то есть в папке jni в приложении Android), и вызываю собственный метод, чтобы вернуть изображение в код Java и отобразить его.
Как это можно сделать? Я не могу найти простое приложение для Android, использующее OpenCV. Я также настроил среду и образцы для Android, использующие OpenCV, такие как cvcamera, калибровки работают нормально. Они использовали SWIG для интерфейса JNI. SWIG обязателен? Я не использовал SWIG. Я много пробовал и все еще пытаюсь.
В Java код выглядит так:
public class HelloJni extends Activity
{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new ShapeView(this));
}
static {
System.loadLibrary("hello-jni");
}
}
class ShapeView extends View
{
private Bitmap mBitmap;
private static native Object drawingShape();
public ShapeView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
mBitmap = (Bitmap) drawingShape();
canvas.drawBitmap(mBitmap, 0, 0, null);
}
}
А в родном классе jni,
#include "ShapeView.h"
#include <string.h>
#include <jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
JNIEXPORT jobject JNICALL Java_ShapeView_drawingShape
(JNIEnv *env, jclass obj) {
IplImage* img = cvCreateImage(cvSize(300, 300), IPL_DEPTH_8U, 3);
cvRectangle(img, cvPoint(100, 100), cvPoint(200, 200), cvScalar(255, 0, 0), 1);
cvCircle(img, cvPoint(100, 100), 20, cvScalar(0, 255, 0), 1);
return (jobject)img;
}
Я скомпилировал нативный код с помощью ndk-build. Файл .so также создан и
установлен без каких-либо ошибок. В коде Java также нет ошибок.
Когда я запускаю приложение в AVD, я могу видеть только черный экран, и он исчезает через несколько секунд.
Какая ошибка в коде?
Если SWIG обязателен, как это можно сделать? Я не очень разбираюсь в OpenCV и SWIG.