如何通过JNI将图像从Java传递到Cocos2d-x?

Shrinidhi Rao

我需要通过JNI将类似drawable的图像数据从Java端传递到cocos2d-x。我该如何实施?JNI函数的参数应该是什么?如何在cocos2d-x端进行强制转换?

sbhhbs
  1. 为JNI创建Java接口,例如:

    public static native void setBG(int[] raw, int width, int height);
    
  2. 在C ++代码中执行以下操作:

    //Use static variable here for simplicity
    
    int *imagedata;
    int staticwidth;
    int staticheight;
    Texture2D *userBackgroundImage;
    
    
    
    void Java_com_my_company_JniHelper_setBG(JNIEnv*  env, jobject thiz, jintArray raw, jint width, jint height)
    {
        jint *carr;
        carr = env->GetIntArrayElements(raw, 0);
        if(carr == NULL) {
            return; /* exception occurred */
        }
        ssize_t dataLen = (int)width * (int)height;
        int *data = new int[dataLen];
        for (long i = 0; i < dataLen; i++)
        {
            data[i] = carr[i];
        }
        imagedata = data;//Make a copy because it need to be done in GLThread
        staticwidth = (int)width;
        staticheight = (int)height;
        env->ReleaseIntArrayElements(raw, carr, 0);
        LOGD("set image: %d * %d", width, height);
    }
    

然后在持续时间层init或其他cocos2d-x代码的某个地方调用以下方法:

    void createImage(const void *data, ssize_t dataLen, int width, int height)
    {
        Texture2D *image = new Texture2D();
        if (!image->initWithData(data, dataLen, Texture2D::PixelFormat::BGRA8888, width,      height, Size(width, height)))
        {
            delete image;
            delete imagedata;
            image = NULL;
            imagedata = NULL;
            userBackgroundImage = NULL;
            return;
        }
        delete imagedata;
        imagedata = NULL;
        userBackgroundImage = image;
    }

然后,您可以使用Texture2D对象创建一个精灵或做任何您想做的事

  1. 要从Java调用此代码:

    public static int[] BitmapToRaw(Bitmap bitmap) {
        Bitmap image = bitmap.copy(Bitmap.Config.ARGB_8888, false);
        int width = image.getWidth();
        int height = image.getHeight();
        int[] raw = new int[width * height];
        image.getPixels(raw, 0, width, 0, 0, width, height);
        return raw;
    }
    
    Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
    JniHelper.setBG(BitmapToRaw(image), image.getWidth(), image.getHeight());
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在cocos2d v3.x中更改CCSprite的图像

来自分类Dev

如何将cocos2d V3.x中的两个CCSprite与IOS进行比较

来自分类Dev

Cocos2d 2.x:我似乎无法更改3GS的启动图像!它仍然显示Cocos2d橙色默认图像

来自分类Dev

在Swift中使用cocos2d v3.x以编程方式更改CCSprite的图像

来自分类Dev

将声音与CCAnimation内部的帧同步以获取cocos2d 2.x *

来自分类Dev

cocos2d 2.x 如何吞下 CCMenuItem 的触摸

来自分类Dev

新的Cocos2D 3.x API?

来自分类Dev

新的Cocos2D 3.x API?

来自分类Dev

Cocos2d x如何在不同的CCNods上同时对动作进行排序?

来自分类Dev

cocos2d 3.x如何处理精灵外的触摸

来自分类Dev

如何正确设置Cocos2d-x图像资源

来自分类Dev

“如何使用Cocos2D 2.X制作基于图块的游戏”使用cocos2d V3制作本教程

来自分类Dev

如何从Java替换cocos2d-x场景?

来自分类Dev

在Coco2d-x(c ++)上重写Cocos2d(objective-c)

来自分类Dev

适用于cocos2d 3.x的图块地图教程?

来自分类Dev

在CCAnimation Cocos2d-x中获取图像

来自分类Dev

如何在cocos2d-x中将背景图像设置为CCMenu

来自分类Dev

将NSString转换为Cocos2d-x CCString

来自分类Dev

Cocos2d-x:如何绘制调整大小的矩形?

来自分类Dev

Cocos2d-x如何启用/禁用ccTouchMoved事件?

来自分类Dev

如何创建不旋转的cocos2d-x的PhysicsBody

来自分类Dev

如何销毁Cocos2d-x中的物品?

来自分类Dev

Cocos2D 3.x一次仅在场景中显示一个精灵

来自分类Dev

\\x 到 \x 与 python

来自分类Dev

cocos2d-x插件-x编译错误

来自分类Dev

如何通过BB Playbook / Z10的Cocos2D-x App分享Facebook状态得分?

来自分类Dev

Cocos2d-x坐标

来自分类Dev

水滴Cocos2d-X

来自分类Dev

Cocos2d-x坐标

Related 相关文章

热门标签

归档