提交 2e772510 编写于 作者: F Florian Echtler 提交者: Alexander Alekhin

Merge pull request #10050 from floe/android-studio-3.3.1

Add Android Mat constructor with support for native buffer (#10050)
上级 c6fb9935
package org.opencv.core;
import java.nio.ByteBuffer;
// C++: class Mat
//javadoc: Mat
public class Mat {
......@@ -39,6 +41,19 @@ public class Mat {
return;
}
//
// C++: Mat::Mat(int rows, int cols, int type, void* data)
//
// javadoc: Mat::Mat(rows, cols, type, data)
public Mat(int rows, int cols, int type, ByteBuffer data)
{
nativeObj = n_Mat(rows, cols, type, data);
return;
}
//
// C++: Mat::Mat(Size size, int type)
//
......@@ -1101,6 +1116,9 @@ public class Mat {
// C++: Mat::Mat(int rows, int cols, int type)
private static native long n_Mat(int rows, int cols, int type);
// C++: Mat::Mat(int rows, int cols, int type, void* data)
private static native long n_Mat(int rows, int cols, int type, ByteBuffer data);
// C++: Mat::Mat(Size size, int type)
private static native long n_Mat(double size_width, double size_height, int type);
......
package org.opencv.test.core;
import java.util.Arrays;
import java.nio.ByteBuffer;
import org.opencv.core.Core;
import org.opencv.core.CvException;
......@@ -1001,4 +1002,16 @@ public class MatTest extends OpenCVTestCase {
assertMatEqual(truth, dst);
}
public void testMatFromByteBuffer() {
ByteBuffer bbuf = ByteBuffer.allocateDirect(64*64);
bbuf.putInt(0x01010101);
Mat m = new Mat(64,64,CvType.CV_8UC1,bbuf);
assertEquals(4, Core.countNonZero(m));
Core.add(m, new Scalar(1), m);
assertEquals(4096, Core.countNonZero(m));
m.release();
assertEquals(2, bbuf.get(0));
assertEquals(1, bbuf.get(4095));
}
}
......@@ -51,6 +51,31 @@ JNIEXPORT jlong JNICALL Java_org_opencv_core_Mat_n_1Mat__
//
// Mat::Mat(int rows, int cols, int type, void* data)
//
JNIEXPORT jlong JNICALL Java_org_opencv_core_Mat_n_1Mat__IIILjava_nio_ByteBuffer_2
(JNIEnv* env, jclass, jint rows, jint cols, jint type, jobject data);
JNIEXPORT jlong JNICALL Java_org_opencv_core_Mat_n_1Mat__IIILjava_nio_ByteBuffer_2
(JNIEnv* env, jclass, jint rows, jint cols, jint type, jobject data)
{
static const char method_name[] = "Mat::n_1Mat__IIILByteBuffer()";
try {
LOGD("%s", method_name);
return (jlong) new Mat( rows, cols, type, (void*)env->GetDirectBufferAddress(data) );
} catch(const std::exception &e) {
throwJavaException(env, &e, method_name);
} catch (...) {
throwJavaException(env, 0, method_name);
}
return 0;
}
//
// Mat::Mat(int rows, int cols, int type)
//
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册