现已解决 方案如下:

1、使用 jni 调用 java 方法 启动相册选择框
2、使用java将获取的图片保存到本地
3、使用Cocos2d-x中 CCImage 读取

JAVA代码如下:

//启动图片选择框
      private void launchCamera()
      {
          // TODO Auto-generated method stub
          Intent intent = new Intent();
          intent.setType("image/*");//set intent type
          intent.setAction(Intent.ACTION_GET_CONTENT);
          
          //取得图片信息返回MainActivity                
          startActivityForResult(intent,1);
      }
      
      //图片选择回调
      protected void onActivityResult(int requestCode,int resultCode,Intent data)
      {
          if(resultCode==RESULT_OK)
          {
              Uri uri = data.getData();
              
              //通过URI获取图片绝对地址            
              String[] proj = { MediaStore.Images.Media.DATA };
              
              Cursor cursor = managedQuery(uri,proj,null,null,null);
              
              int actual_image_column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
              
              //游标跳到首位,防止越界            
              cursor.moveToFirst();
              
              String img_path = cursor.getString(actual_image_column_index);
        
              //通过地址获得位图信息            
              Bitmap bitmap =BitmapFactory.decodeFile(img_path);                
              
              saveMyBitmap("001", bitmap);
              
           }
          
      }

//保存图片到本地
      private void saveMyBitmap(String bitName,Bitmap mBitmap) 
      {
              File f = new File("/sdcard/" + bitName + ".png");
              try {
                      
                      f.createNewFile();
                      
              } catch (IOException e) {
               // TODO Auto-generated catch block
                      
              }
              
              FileOutputStream fOut = null;
              try {
              
                      fOut = new FileOutputStream(f);
                      
              } catch (FileNotFoundException e) {
               
                      e.printStackTrace();
              }
              
              mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
              
              try {
              
                      fOut.flush();
                      
              } catch (IOException e) {
               
                      e.printStackTrace();
              }
              
              try {
               
                      fOut.close();
                      
              } catch (IOException e) {
               
                      e.printStackTrace();
              }
              
      }

C++代码如下:

//读取本地存储数据
CCSprite* LoadingLayer::loadImage()
{
    CCSprite* tempsprite = NULL;
    
    const char* path = "/sdcard/001.png";
    FILE* fp = fopen(path, "rb");
    if (!fp)
    {
        return tempsprite;
    }
    
    fseek(fp,0,SEEK_END);
    int len = ftell(fp);
    fseek(fp,0,SEEK_SET);
    char* buf = (char*)malloc(len);
    fread(buf,len,1,fp);
    fclose(fp);
    
    if(len==0 || buf==NULL)
    {
        return tempsprite;
    }
    
    CCImage* img = new CCImage;
    img->initWithImageData(buf,len);
    free(buf);
    cocos2d::CCTexture2D* texture = new cocos2d::CCTexture2D();
    texture->initWithImage(img);
    img->release();
    tempsprite = CCSprite::createWithTexture(texture);
    texture->release();
    
    return tempsprite;
    
}

android平台 cocos2d-x 读取相册数据的更多相关文章

  1. Android平台使用SQLite数据库存储数据

    创建一个DataBaseHelper的类,这个类是继承SQLiteOpenHelper类的,这个类中包含创建数据库.打开数据库.创建表.添加数据和查询数据的方法.代码如下: package com.e ...

  2. Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)

    使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...

  3. Android平台介绍

    一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操 ...

  4. uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

    Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取.因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许. 读写手机存储权 ...

  5. Android——配置文件的保存SharedPreferences进行数据存储

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果 ...

  6. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  7. Android中解析JSON形式的数据

    1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式, ...

  8. 基于Android 平台简易即时通讯的研究与设计[转]

    摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...

  9. Android 平台 HTTP网速測试 案例 API 分析

    作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速測试标准 : 除普通网页測速 ...

随机推荐

  1. python tips:描述符descriptor

    描述符(descriptor)是实现了__get__.__set__.__del__方法的类,进一步可以细分为两类: 数据描述符:实现了__get__和__set__ 非数据描述符:没有实现__set ...

  2. final关键字用法

    Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的. final方法 ...

  3. css图片居中(水平居中和垂直居中)

    css图片居中(水平居中和垂直居中) css图片居中分css图片水平居中和垂直居中两种情况,有时候还需要图片同时水平垂直居中,下面分几种居中情况分别介绍. css图片水平居中 利用margin: 0 ...

  4. Python OS & sys模块

    os模块(* * * *) os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname" ...

  5. BZOJ 4511 洛谷3131 USACO 16.Jan 七子共

    用sum[i]表示前缀和模7的值,若存在i≤j,满足sum[i]==sum[j],则区间(i,j]的和为7的倍数. O(N)扫出sum[0]~sum[6]第一次出现的位置first和最后一次出现的次数 ...

  6. hdu2013 蟠桃记【C++】

    蟠桃记 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. 赛门铁克扩展验证EV SSL证书

      申请EV SSL证书,将接受最严格验证企业域名所有权和企业身份信息,属于最高信任级别扩展验证(EV)的 EV SSL证书,最高达256位自适应加密.Symantec不仅提供先进的SSL加密技术,同 ...

  8. 传染病控制(洛谷 1041 WA 90)

    题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...

  9. sqlserver 字符串函数

    转自:http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 以下所有例子均Studnet表为例:  计算字符串长度len( ...

  10. MVC.Net:MVC.Net与WebAPI的IOC实现

    我们通过Ninject(http://www.ninject.org/)项目来帮助我们实现MVC.Net与WebAPI项目的IOC实现. 首先我们来看MVC.Net的IOC实现. 1. 通过NuGet ...