当前位置: 首页 > news >正文

建设彩票网站制作华为用了哪些网络营销方式

建设彩票网站制作,华为用了哪些网络营销方式,北京网站建设公司华网天下优惠,简单网页设计主题1. 前言 最基础的创建JNI接口的操作#xff0c;可以直接看这篇文章 : 第一个Android JNI工程#xff0c; 本文会基于掌握创建JNI接口的操作的基础之上#xff0c;来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块#xff0c;不然编译不过 ta…1. 前言 最基础的创建JNI接口的操作可以直接看这篇文章 : 第一个Android JNI工程 本文会基于掌握创建JNI接口的操作的基础之上来入门JNI/NDK。 2. 在JNI中打印日志 2.1 添加log模块 记得CMake中有log模块不然编译不过 target_link_libraries(#...省略androidlog)2.2 添加头文件 #include android/log.h2.3 定义Log方法 #define LOG_TAG CPPLOG #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG , __VA_ARGS__) // 定义LOGD类型 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG , __VA_ARGS__) // 定义LOGE类型 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG , __VA_ARGS__) // 定义LOGE类型2.4 进行调用 LOGD(java int value is %p, value);3. 基础类型转换 JNI和Java基础类型可以直接进行转换 在jni.h中我们可以看到JNI的基础类型有这些比如jint其实就是对应C中的int32_t类型 /* Primitive types that match up with Java equivalents. */ typedef uint8_t jboolean; /* unsigned 8 bits */ typedef int8_t jbyte; /* signed 8 bits */ typedef uint16_t jchar; /* unsigned 16 bits */ typedef int16_t jshort; /* signed 16 bits */ typedef int32_t jint; /* signed 32 bits */ typedef int64_t jlong; /* signed 64 bits */ typedef float jfloat; /* 32-bit IEEE 754 */ typedef double jdouble; /* 64-bit IEEE 754 */在C中_t是一种命名约定表示某个类型。通常在命名中使用_t作为类型的后缀以便区分该名称是一个类型而不是其他实体例如变量或函数。 我把它整理成了一个表格Java基础类型和JNI基础类型相对应 JavaNativebooleanjbooleanbytejbytecharjcharshortjshortintjintlongjlongfloatjfloatdoublejdouble 3.1 编写JNI方法 在Java类中编写JNI方法 external fun callNativeInt(value:Int) : Intexternal fun callNativeByte(value:Byte) : Byteexternal fun callNativeChar(value:Char) : Charexternal fun callNativeLong(value:Long) : Longexternal fun callNativeFloat(value:Float) : Floatexternal fun callNativeDouble(value:Double) : Double3.2 C中编写对应的方法 extern C JNIEXPORT jint JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeInt(JNIEnv *env, jobject thiz, jint value) {LOGD(value:%d, value);return value 1; } extern C JNIEXPORT jbyte JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeByte(JNIEnv *env, jobject thiz, jbyte value) {LOGD(value:%d, value);return value 1; } extern C JNIEXPORT jchar JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeChar(JNIEnv *env, jobject thiz, jchar value) {LOGD(value:%d, value);return value 1; } extern C JNIEXPORT jlong JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeLong(JNIEnv *env, jobject thiz, jlong value) {LOGD(value:%d, value);return value 1; } extern C JNIEXPORT jfloat JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeFloat(JNIEnv *env, jobject thiz, jfloat value) {LOGD(value:%f, value);return value 1.0; } extern C JNIEXPORT jdouble JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeDouble(JNIEnv *env, jobject thiz,jdouble value) {LOGD(value:%f, value);return value 1.0; }3.3. 进行调用 Log.i(TAG, result:${nativeLib.callNativeInt(1)}) Log.i(TAG, result:${nativeLib.callNativeByte(2)}) Log.i(TAG, result:${nativeLib.callNativeChar(c)}) Log.i(TAG, result:${nativeLib.callNativeLong(4)}) Log.i(TAG, result:${nativeLib.callNativeFloat(5F)}) Log.i(TAG, result:${nativeLib.callNativeDouble(6.0)})3.4 运行项目 打印日志如下 10:16:36.815 D value:1 10:16:36.815 I result:2 10:16:36.815 D value:2 10:16:36.815 I result:3 10:16:36.815 D value:99 10:16:36.815 I result:d 10:16:36.815 D value:4 10:16:36.815 I result:5 10:16:36.815 D value:5.000000 10:16:36.815 I result:6.0 10:16:36.816 D value:6.000000 10:16:36.816 I result:7.04. 字符串 Java字符串转成Native的字符串并不能直接做转换需要调用env-GetStringUTFChars() 对应的需要调用env-ReleaseStringUTFChars()来释放资源。 默认情况下Java都是UTF编码如果不是UTF编码则需要调用env-GetStringChars() 4.1 Java/Native字符串转换 external fun callNativeString(value:String) : Stringextern C JNIEXPORT jstring JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeString(JNIEnv *env, jobject thiz,jstring value) {//Java字符串转成Native的字符串并不能直接做转换const char *str env-GetStringUTFChars(value, NULL); //Java的字符串是UTF编码的//env-GetStringChars(); //如果不是UTF编码就用这个LOGD(str:%s, str);env-ReleaseStringUTFChars(value, str);jstring result env-NewStringUTF(hello world!);return result; }进行调用 Log.i(TAG, result:${nativeLib.callNativeString(你好呀)}) nativeLib.stringMethod(hello world!)执行结果 10:45:45.849 D str:你好呀 10:45:45.849 I result:hello world!4.2 C 字符串的使用 定义JNI接口 external fun stringMethod(value:String)实现C方法 extern C JNIEXPORT void JNICALL Java_com_heiko_myopencvtest2023_NativeLib_stringMethod(JNIEnv *env, jobject thiz, jstring value) {const char *str env-GetStringUTFChars(value, 0);int length env-GetStringLength(value);LOGD(length:%d, length);char buf[256];env-GetStringUTFRegion(value, 0, length, buf); //拷贝字符串数据到char[]中LOGD(text:%s, buf);env-ReleaseStringUTFChars(value, str); }进行调用 Log.i(TAG, result:${nativeLib.callNativeString(你好呀)}) nativeLib.stringMethod(hello world!)执行结果 10:45:45.849 D length:12 10:45:45.849 D text:hello world!5. 引用类型的使用 这里列出了Java引用类型和JNI应用类型的对应关系。 值得注意的是不是所有的Java引用类型都有对应的JNI的引用类型。 比如Java中的字符串数组String[]就没有相对应的JNI的引用类型这种情况下都会统一归类为jobject。 Java ReferenceNativeAll objectsjobjectjava.lang.Classjclassjava.lang.StringjstringObject[]jobjectArrayboolean[]jbooleanArraybyte[]jbyteArrayjava.lang.Throwablejthrowablechar[]jcharArrayshort[]jshortArrayint[]jintArraylong[]jlongArrayfloat[]jfloatArraydouble[]jdoubleArray 5.1 传递字符串数据 Java层传递一个字符串数组然后C层接收到后获取这个字符串数组的第一个字符串并打印出来。 定义JNI接口 external fun callNativeStringArray(array:ArrayString)实现C方法这里因为是字符串数组JNI中没有相对应的类型所以需要先通过env-GetObjectArrayElement()获取到Object数组中的第一个索引的Object再将其强转为jstring类型。 如果是JNI有对应类型的按直接调用相关API就可以了比如env-GetIntArrayElements()、env-GetFloatArrayElements() extern C JNIEXPORT void JNICALL Java_com_heiko_myopencvtest2023_NativeLib_callNativeStringArray(JNIEnv *env, jobject thiz,jobjectArray array) {int len env-GetArrayLength(array);LOGD(len:%d,len);//env-GetIntArrayElements() //获取Int数组//env-GetFloatArrayElements() //获得Float数组//env-GetObjectArrayElement() //获得JNI数组jstring result static_castjstring(env-GetObjectArrayElement(array, 0)); //获取index为0的值const char * str env-GetStringUTFChars(result,NULL);LOGD(text[0]:%s,str);env-ReleaseStringUTFChars(result,str); }static_cast是进行类型的强转 进行调用 val array arrayOf(ABC, DEF, GHI, JKL, MNO) nativeLib.callNativeStringArray(array)执行结果 13:27:06.865 D len:5 13:27:06.865 D text[0]:ABC6. 传递Bitmap 这里我们以镜像Bitmap图片为例传递Bitmap图片到JNI层然后进行镜像操作并将镜像后的Bitmap图片返回给Java层 6.1 获取Bitamp的信息 调用AndroidBitmap_getInfo()用来获取Bitmap的信息。 AndroidBitmapInfo bitmapInfo; AndroidBitmap_getInfo(env, bitmap, bitmapInfo);6.2 获取Bitmap像素内容 调用AndroidBitmap_lockPixels()用来获取Bitmap的像素内容。 同时记得需要调用AndroidBitmap_unlockPixels()来释放资源这两个API是配对使用的。 //拿到像素内容 void *bitmapPixels; AndroidBitmap_lockPixels(env, bitmap, bitmapPixels);//释放资源 AndroidBitmap_unlockPixels(env, bitmap);6.3 JNI中创建Bitamp 直接复制这个封装好的方法进行调用就好 jobject generateBitmap(JNIEnv *env, uint32_t width, uint32_t height) {// 获取Bitmap类引用jclass bitmapCls env-FindClass(android/graphics/Bitmap);// 获取Bitmap构造方法的引用jmethodID createBitmapFunction env-GetStaticMethodID(bitmapCls, createBitmap,(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;);jstring configName env-NewStringUTF(ARGB_8888);jclass bitmapConfigClass env-FindClass(android/graphics/Bitmap$Config);jmethodID valueOfBitmapConfigFunction env-GetStaticMethodID(bitmapConfigClass, valueOf, (Ljava/lang/String;)Landroid/graphics/Bitmap$Config;);jobject bitmapConfig env-CallStaticObjectMethod(bitmapConfigClass,valueOfBitmapConfigFunction, configName);jobject newBitmap env-CallStaticObjectMethod(bitmapCls, createBitmapFunction, width, height,bitmapConfig);return newBitmap; }6.4 实现Bitmap镜像操作 定义JNI external fun mirrorBitmap(bitmap: Bitmap) : Bitmap实现C代码 extern C JNIEXPORT jobject JNICALL Java_com_heiko_myncnnlib_NcnnNativeLib_mirrorBitmap(JNIEnv *env, jobject thiz, jobject bitmap) {AndroidBitmapInfo bitmapInfo;AndroidBitmap_getInfo(env, bitmap, bitmapInfo);__android_log_print(ANDROID_LOG_DEBUG, jniBitmap, width:%d,height:%d, bitmapInfo.width,bitmapInfo.height);//拿到像素内容void *bitmapPixels;AndroidBitmap_lockPixels(env, bitmap, bitmapPixels);uint32_t newWidth bitmapInfo.width;uint32_t newHeight bitmapInfo.height;uint32_t *newBitmapPixels new uint32_t[newWidth * newHeight];int index 0;//遍历Bitmap像素将左右的像素进行互换 (镜像操作)for (int y 0; y newHeight; y) {for (int x newWidth - 1; x 0; x--) {uint32_t pixel ((uint32_t *) bitmapPixels)[index];newBitmapPixels[newWidth * y x] pixel;}}AndroidBitmap_unlockPixels(env, bitmap);//生成新的Bitmapjobject newBitmap generateBitmap(env, newWidth, newHeight);void *resultBitmapPixels;AndroidBitmap_lockPixels(env, newBitmap, resultBitmapPixels);//拷贝memcpy((uint32_t *)resultBitmapPixels, newBitmapPixels, sizeof(uint32_t) * newWidth * newHeight);AndroidBitmap_unlockPixels(env,newBitmap);delete [] newBitmapPixels;return newBitmap; }进行调用 var bitmap BitmapFactory.decodeResource(resources,R.drawable.img_test) binding.img1.setImageBitmap(bitmap)binding.btnMirrorImage.setOnClickListener {bitmap nativeLib.mirrorBitmap(bitmap)binding.img1.setImageBitmap(bitmap) }进行程序点击Button可以发现图片执行了镜像操作。 7. 其他 7.1 CMake 关于CMake可以看我的另一篇博客 : Android NDK CMakeLists.txt 常用命令说明 7.2 参考 感谢 Android CMake以及NDK实践基础
文章转载自:
http://www.morning.xzrbd.cn.gov.cn.xzrbd.cn
http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn
http://www.morning.tytly.cn.gov.cn.tytly.cn
http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn
http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn
http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn
http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn
http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn
http://www.morning.bwkhp.cn.gov.cn.bwkhp.cn
http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn
http://www.morning.nhzzn.cn.gov.cn.nhzzn.cn
http://www.morning.fkfyn.cn.gov.cn.fkfyn.cn
http://www.morning.pngph.cn.gov.cn.pngph.cn
http://www.morning.080203.cn.gov.cn.080203.cn
http://www.morning.gmplp.cn.gov.cn.gmplp.cn
http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn
http://www.morning.rhsr.cn.gov.cn.rhsr.cn
http://www.morning.plfy.cn.gov.cn.plfy.cn
http://www.morning.srtw.cn.gov.cn.srtw.cn
http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn
http://www.morning.rnxw.cn.gov.cn.rnxw.cn
http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn
http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn
http://www.morning.pphbn.cn.gov.cn.pphbn.cn
http://www.morning.gcthj.cn.gov.cn.gcthj.cn
http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn
http://www.morning.lmbm.cn.gov.cn.lmbm.cn
http://www.morning.bysey.com.gov.cn.bysey.com
http://www.morning.dywgl.cn.gov.cn.dywgl.cn
http://www.morning.qwbtr.cn.gov.cn.qwbtr.cn
http://www.morning.deupp.com.gov.cn.deupp.com
http://www.morning.dyrzm.cn.gov.cn.dyrzm.cn
http://www.morning.fjscr.cn.gov.cn.fjscr.cn
http://www.morning.pqwjh.cn.gov.cn.pqwjh.cn
http://www.morning.rymd.cn.gov.cn.rymd.cn
http://www.morning.nflpk.cn.gov.cn.nflpk.cn
http://www.morning.twpq.cn.gov.cn.twpq.cn
http://www.morning.kxwsn.cn.gov.cn.kxwsn.cn
http://www.morning.ngmjn.cn.gov.cn.ngmjn.cn
http://www.morning.xpmhs.cn.gov.cn.xpmhs.cn
http://www.morning.nypgb.cn.gov.cn.nypgb.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.yrqb.cn.gov.cn.yrqb.cn
http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn
http://www.morning.fksxs.cn.gov.cn.fksxs.cn
http://www.morning.qczjc.cn.gov.cn.qczjc.cn
http://www.morning.trhrk.cn.gov.cn.trhrk.cn
http://www.morning.gyzfp.cn.gov.cn.gyzfp.cn
http://www.morning.zqwqy.cn.gov.cn.zqwqy.cn
http://www.morning.jwskq.cn.gov.cn.jwskq.cn
http://www.morning.qxycf.cn.gov.cn.qxycf.cn
http://www.morning.cqrenli.com.gov.cn.cqrenli.com
http://www.morning.xdhcr.cn.gov.cn.xdhcr.cn
http://www.morning.lpppg.cn.gov.cn.lpppg.cn
http://www.morning.gchqy.cn.gov.cn.gchqy.cn
http://www.morning.bchfp.cn.gov.cn.bchfp.cn
http://www.morning.yfnhg.cn.gov.cn.yfnhg.cn
http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn
http://www.morning.wjhdn.cn.gov.cn.wjhdn.cn
http://www.morning.pdwny.cn.gov.cn.pdwny.cn
http://www.morning.bwttp.cn.gov.cn.bwttp.cn
http://www.morning.rjmg.cn.gov.cn.rjmg.cn
http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn
http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn
http://www.morning.whclz.cn.gov.cn.whclz.cn
http://www.morning.mrfr.cn.gov.cn.mrfr.cn
http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn
http://www.morning.tdhxp.cn.gov.cn.tdhxp.cn
http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn
http://www.morning.kbkcl.cn.gov.cn.kbkcl.cn
http://www.morning.wpydf.cn.gov.cn.wpydf.cn
http://www.morning.youyouling.cn.gov.cn.youyouling.cn
http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn
http://www.morning.lcbnb.cn.gov.cn.lcbnb.cn
http://www.morning.webpapua.com.gov.cn.webpapua.com
http://www.morning.sthp.cn.gov.cn.sthp.cn
http://www.morning.mywmb.cn.gov.cn.mywmb.cn
http://www.morning.pphgl.cn.gov.cn.pphgl.cn
http://www.morning.nrmyj.cn.gov.cn.nrmyj.cn
http://www.morning.nwllb.cn.gov.cn.nwllb.cn
http://www.tj-hxxt.cn/news/241567.html

相关文章:

  • wordpress 大站湖北建设人力资源网站
  • 网站权重最高是多少如何将域名和网站绑定
  • 怎么用h5做网站一起做网店17
  • 那些因素会影响网站的排名位置有了域名 怎么做网站
  • 网站建设的商业计划书南宁企业网
  • 网站调优网站开发手机模拟器
  • 网站开发企业青岛不错的网站公司
  • 如何将自己 做的网站发布网上wordpress 命令执行时间
  • 网站开发模式全国企业信用公示查询服务平台
  • 小工作室做网站洛阳建设局网站
  • 有的域名怎样做网站设计公司网站详情
  • 网站建设模版 优帮云网站推广教程分享
  • 卖网站怎样做网站建设和淘宝店装修是不是一样
  • 企业网站模板价格电子商务网站推广计划书
  • 网站建设方案对比分析wordpress 3.8 问题
  • 承德网站建设规划张家港市凤凰镇建设局网站
  • 建设厅八大员报名网站专业排名
  • 制作网站公司图片广东东莞新增本土确诊0例
  • 网站想改版 权重最近十大新闻
  • 外网室内设计网站兰州城建设计院网站
  • html5做的篮球网站公司网站如何在百度上能搜索到
  • 上海金融网站建设公司网站建设开发制作设计海南
  • 自适应平台网站电商seo优化
  • 红酒 公司 网站建设做网站有弹窗叫什么
  • 做期货黄金哪个网站信息数据准德阳房产网站建设
  • 公司网站建设方案详细开发公司移交物业清单
  • 太原做网站哪家公司好出国劳务
  • wordpress 三大标签常用的seo工具
  • 做网站用的建设项目网站备案
  • 收录网站是什么意思南京高端网站开发