新建 一个项目 名字:testJin  包名:com.TanSon.org  python命令:python create_project.py -project testJin -package com.TanSon.org -language cpp

eclipse 导入项目配置 。。。 略去,(可以google)

1 c++ 调用 andriod

  1.1 包含头文件

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#endif

  1.2 通过 jni 调用 java ,,(请里是调用java类里的表静态函数)

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 
JniMethodInfo minfo;//定义Jni函数信息结构体
  // com/TanSon/org/ 是建项目时的包签名,用 '/' 替换 '.' , testJin 类名,建项目时,cocos2dx 自动以项目名字,在对应 com/TanSon/org/ 里创建的一个类。 testFun: 要调用java 的函数,"()V" :括号里是参数,后是返回值,这里是无参无返回
  bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/TanSon/org/testJin","testFun", "()V"); 
  if (!isHave) 
   {
     CCLOG("jni:此函数不存在");
   }
  else{
    CCLOG("jni:此函数存在");
    //调用此函数
    minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
  }
  CCLOG("jni-java函数执行完毕");
#endif

  

  1.3 java 里的函数编写 ,,在 testJin 类里 加个静态函数 testFun

static public  void testFun() {
Log.e("tanson", "testFun call in java"); Activity context = (Activity) Cocos2dxHelper.getsContext();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
context.startActivityForResult(intent, ); //调用相机,结果在下个函数返回
}

   再加个相机返回的处理函数

  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //相机返回 super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) { //显示图片名字
String name = new DateFormat().format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".jpg";
Toast.makeText(this, name, Toast.LENGTH_LONG).show();
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 if (bitmap != null) {
final byte[] pixels = new byte[bitmap.getWidth()
* bitmap.getHeight() * ];
final ByteBuffer buf = ByteBuffer.wrap(pixels);
buf.order(ByteOrder.nativeOrder());
bitmap.copyPixelsToBuffer(buf);
testJin.SetImgByte(bitmap.getWidth(),bitmap.getHeight(), pixels); // SetImgByte 函数下面讲,,这个是 java 调用c++ 函数,把图片数据传到c++
       }
     }
   }
private static native void SetImgByte(final int pWidth,
final int pHeight, final byte[] pPixels); /// 连接到c++里的函数,在testJin 类里先声明一下, 静态

  2 java 调用 c++

  在要调用 c++的类里面,先声明一下函数。如上面 SetImgByte

  再在c++里写上 按 jni 格式的 代码:

  

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

extern

"C"

{
  // 格式 Java_ + 类的路径,+ 函数名字 ,参数前两个不变,后机是java 调用传过来的参数
void Java_com_TanSon_org_testLua2_SetImgByte(JNIEnv* env, jobject thiz,int width, int height,jbyteArray pixels) {
int size = width * height * ;
unsigned char * pImgData = new unsigned char[size];
env->GetByteArrayRegion(pixels, , size, (jbyte*)pImgData);
CCLOG("=========java call c++ SetImgByte() size:%d",size); AppDelegate::sImgData = pImgData; // HelloWorld::changeStr = tempStr;
} } #endif

  

coco2dx jni 调用 java 相机返回 图片数据的更多相关文章

  1. java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  2. java native interface JNI 调用Java方法

    在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...

  3. init.rc文件中面启动c++程序,通过jni调用java实现

    </pre><p>注:假设是自己的myself.jar包,还要修改例如以下:</p><p>target/product/core_base.mk PRO ...

  4. Android NDK开发之Jni调用Java对象

    https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instan ...

  5. js调用java代码返回解决方案

    版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 今天封装一个加密标签,遇到一个问题,我需要对页面上的数据调用java后台代码进行解密,而标签里只能通过js获取到数据,所以就遇 ...

  6. HAL中通过JNI调用java方法【转】

    转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...

  7. Android Studio NDK开发-JNI调用Java方法

    相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需 ...

  8. PL/SQL 调用JAVA使用UDP发送数据

    步骤如下 1.直接在SQL命令中写入JAVA代码(用SYS帐号执行,不然权限等太麻烦) create or replace and resolve java source named udp as i ...

  9. java 封装返回json数据

    做的东西,一直是用easyui的,和后台的交互数据都是json格式的. 今天想要单独弄一个json数据返回给前台,其实是比较简单的问题,json接触不多,记录一下. 代码: public static ...

随机推荐

  1. redis连接池自动释放

    http://blog.itpub.net/29485627/viewspace-1977880/

  2. request.getParameterValues与request.getParameter的区别

    一. 简单的对比 request.getParameter用的比较多,相对熟悉 request.getParameterValues(String   name)是获得如checkbox类(名字相同, ...

  3. 【Foreign】石子游戏 [博弈论]

    石子游戏 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output 输出T行,表示每组的答案. Sample Input 3 ...

  4. 【BZOJ1857】【SCOI2010】传送带 [三分]

    传送带 Time Limit: 1 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 在一个2维平面上有两条传送带,每一条传送 ...

  5. return 与 exit() 的区别

    return是一个关键字,返回函数值:exit()是一个函数: return是语言级的:exit()是操作系统提供的函数: return表示函数退出:exit()表示进程退出: 非主函数中调用retu ...

  6. CentOS RabbitMQ安装

    1. 安装erlang,参考另外一篇文章: http://www.cnblogs.com/wanpengcoder/p/5287302.html 2. 安装libxslt和: yum install ...

  7. linux驱动基础系列--Linux I2c驱动分析

    前言 主要是想对Linux I2c驱动框架有一个整体的把控,因此会忽略协议上的某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型.sysfs等也不进行详细说明原理,涉及到i2c协议部分也只 ...

  8. linux 中解析命令行参数(getopt_long用法)

    linux 中解析命令行参数(getopt_long用法) http://www.educity.cn/linux/518242.html 详细解析命令行的getopt_long()函数 http:/ ...

  9. Bean利用Resource接口获取资源的几种方式

    Resources的类型 获取resource的方式(xml配置正常进行):

  10. pandas求五日线并画图

    import pandas as pd import numpy as np import matplotlib.pyplot as plt stock_data = pd.read_csv('000 ...