coco2dx java交互_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#include"platform/android/jni/JniHelper.h"#include

#endif

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

fcecaa27ea5212ceb9bf034c36bfbf34.gif#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

fcecaa27ea5212ceb9bf034c36bfbf34.gif

7a47062472c0c55d42a18cc96b2c416a.png

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

fcecaa27ea5212ceb9bf034c36bfbf34.gifstatic public voidtestFun() {

Log.e("tanson", "testFun call in java");

Activity context=(Activity) Cocos2dxHelper.getsContext();

Intent intent= newIntent(MediaStore.ACTION_IMAGE_CAPTURE);

context.startActivityForResult(intent,1); //调用相机,结果在下个函数返回

}

fcecaa27ea5212ceb9bf034c36bfbf34.gif

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

fcecaa27ea5212ceb9bf034c36bfbf34.gifprotected void onActivityResult(int requestCode, intresultCode, 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) {

finalbyte[] pixels = new byte[bitmap.getWidth()* bitmap.getHeight() * 4];

final ByteBuffer buf=ByteBuffer.wrap(pixels);

buf.order(ByteOrder.nativeOrder());

bitmap.copyPixelsToBuffer(buf);

testJin.SetImgByte(bitmap.getWidth(),bitmap.getHeight(), pixels); //SetImgByte 函数下面讲,,这个是 java 调用c++ 函数,把图片数据传到c++}

}

}

fcecaa27ea5212ceb9bf034c36bfbf34.gif

private static native void SetImgByte(final intpWidth,

finalint pHeight, final byte[] pPixels);/// 连接到c++里的函数,在testJin 类里先声明一下, 静态

2 java 调用 c++

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

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

fcecaa27ea5212ceb9bf034c36bfbf34.gif#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

extern

"C"{

// 格式 Java_ + 类的路径,+ 函数名字 ,参数前两个不变,后机是java 调用传过来的参数void Java_com_TanSon_org_testLua2_SetImgByte(JNIEnv* env, jobject thiz,int width, intheight,jbyteArray pixels)

{int size = width * height * 4;

unsignedchar * pImgData = new unsigned char[size];

env->GetByteArrayRegion(pixels, 0, size, (jbyte*)pImgData);

CCLOG("=========java call c++ SetImgByte() size:%d",size);

AppDelegate::sImgData=pImgData;//HelloWorld::changeStr = tempStr;

}

}#endif

fcecaa27ea5212ceb9bf034c36bfbf34.gif

原文:http://www.cnblogs.com/sanjin/p/3737135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值