嘿伙计们,我有一个将nativeobjectaddres从java传递到c ++的问题
这是我的java代码,findboardimage是一个c ++方法
Mat original = new Mat(), processed = new Mat(), res = new Mat();
Utils.bitmapToMat(bitmap[0], original);
if(original.channels()>4){
return null;
}
Logger.d("before native imagetype "+ original.type()+" imagedepth "+original.depth()+" imagechannels "+original.channels());
Logger.d("before address "+original.getNativeObjAddr() );
return findBoardInImage(original.getNativeObjAddr());
c ++方法
JNIEXPORT void JNICALL Java_be_appwise_i3snap_1android_helpers_I3ImageProcessor_extractForeground(JNIEnv *env,jlong res) {
cv::Mat *resMat = (cv::Mat *) res;
__android_log_print(ANDROID_LOG_ERROR,"extractforeground ","voor eigen functie col %d rows %d");
*resMat=ImageProcessor::extractForeground(*resMat);
__android_log_print(ANDROID_LOG_ERROR,"extractforeground","na eigen functie col %d rows %d");
}
工作: 32位armeabi-v7a oneplus x,一加一,三星galaxy s4,sony experia m2和老三星平板电脑
不工作: arm64-V8A huawei,samsung s6,nexus 6p
这个mat有随机数的类型和随机数的通道让我相信long是32位但被解释为64位所以getchannel和gettype函数比它们应该大得多
答案 0 :(得分:1)
我自己解决了这个问题 我确实注意到一些性能问题。 64位设备比32位设备慢得多。
$routeProvider.
when('/wall', {controller:DashboardCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/dashboard.html'}).
when('/books', {controller:BooksCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/books.html'}).
when('/tests', {controller:TestsCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/tests.html'}).
when('/createbook', {controller:CreateBookCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/bookcreation.html'}).
when('/createbookpage', {controller:CreateBookPageCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/bookpagecreation.html'}).
otherwise({redirectTo:'/wall'});
;
当您在gradle中导入库并且它包含64位版本时,它将忽略其他库的所有32位版本,这就是为什么我的java为32位且我的c ++试图将其理解为64位