coco2dx jni 调用 java 相机返回 图片数据
新建 一个项目 名字: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 相机返回 图片数据的更多相关文章
- java通过url调用远程接口返回json数据
java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...
- java native interface JNI 调用Java方法
在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...
- init.rc文件中面启动c++程序,通过jni调用java实现
</pre><p>注:假设是自己的myself.jar包,还要修改例如以下:</p><p>target/product/core_base.mk PRO ...
- Android NDK开发之Jni调用Java对象
https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instan ...
- js调用java代码返回解决方案
版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 今天封装一个加密标签,遇到一个问题,我需要对页面上的数据调用java后台代码进行解密,而标签里只能通过js获取到数据,所以就遇 ...
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- Android Studio NDK开发-JNI调用Java方法
相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需 ...
- PL/SQL 调用JAVA使用UDP发送数据
步骤如下 1.直接在SQL命令中写入JAVA代码(用SYS帐号执行,不然权限等太麻烦) create or replace and resolve java source named udp as i ...
- java 封装返回json数据
做的东西,一直是用easyui的,和后台的交互数据都是json格式的. 今天想要单独弄一个json数据返回给前台,其实是比较简单的问题,json接触不多,记录一下. 代码: public static ...
随机推荐
- JAVA路线
[转]Java自学之路——by马士兵 作者:马士兵老师 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机. ...
- 将setter方法与itemClick: 进行类比
https://www.evernote.com/shard/s227/sh/a0c3afa3-8792-4756-8594-d2387a7f57ad/b561ff665af9ad401c8e ...
- mobius反演讲解
mobius反演的基本形式为,假设知道函数F(x)=Σf(d) d|x,那么我们可以推出f(x)=Σmiu(d)*F(x/d) d|x,另一基本形式为假设知道函数F(x)=Σf(d) x|d,那么我们 ...
- bzoj 1191 匈牙利算法
只需要做一遍匈牙利,只要有一个没法匹配上就break就行了 /************************************************************** Proble ...
- Windows XP SP1 Privilege Escalation
MS05-018 MS05-018 Works for Windows 2K SP3/4 | Windows XP SP1/2 Download ms05-018.exe: https://githu ...
- Linux下安装mantis配置指南【转】
转自:http://blog.csdn.net/xabc3000/article/details/6858229 目录(?)[-] Linux下安装mantis配置指南 配置Linux下的Apache ...
- Jxl、JxCell图表导出功能的实现
最近接触过许多报表导出功能,也用过多种工具进行导出功能的实现,但对于图表的导出一直没有仔细的去展开研究和探讨,直到最近略微整理了下这方面的需求和技术攻克. 首先导出excel功能的实现主要有JXL.J ...
- ORM-老师信息系统
老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 (自定义第三张表,通过外键与其他两张表关联 但是不能用Django ORM 多对多操作的语法) class Class(mo ...
- go语言多态接口样例
感觉比java玄幻啊~~~ package main import ( "fmt" ) type notifier interface{ notify() } type user ...
- SVN的配置和使用
1.安装前必备 获取 Subversion 服务器程序 到官方网站 http://subversion.tigris.org/ 我下的是CollabNetSubversion-server-1. ...