首页 > 其他分享 >android利用jni读取assets文件夹下的文件

android利用jni读取assets文件夹下的文件

时间:2024-09-06 17:18:57浏览次数:13  
标签:assets AAsset imgBuff asset jni bufferSize android 读取

一、概述

  在jni的开发中,有时候会在c/c++层读取assets文件夹下的图片。

  有两种方式可以选择:

  方式一:在java/kotlin层把文件读取出来,然后以字符串的形式传递给jni层。

  方式二:java/kotlin层传递一个文件名,jni利用AAssetManager读取文件内容

  目前介绍的是第二种方案

二、代码示例

  1.在cmake中引入android和jnigraphics

target_link_libraries( # Specifies the target library.
        opengl_filter


        opencv_java3
        seeta_fa_lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        -lGLESv3
        jnigraphics
        -landroid
        )

  2.导入相关的头文件

//从assets文件夹中加载文件(图片或字符串)
#include <assert.h>
#include <android/asset_manager_jni.h>
#include <android/asset_manager.h>

  3.具体的执行方法

void loadBitmapFromAssets(AAssetManager *assetManager, const char *fileName) {
        AAsset *asset = AAssetManager_open(assetManager, fileName, AASSET_MODE_UNKNOWN);
        if (NULL == asset) {
            LOGE("asset is NULL");
        }
        off_t bufferSize = AAsset_getLength(asset);
        LOGD("buffer size is %ld", bufferSize);

        unsigned char *imgBuff = (unsigned char *) malloc(bufferSize + 1);
        if (NULL == imgBuff) {
            LOGE("imgBuff alloc failed");
        }
        memset(imgBuff, 0, bufferSize + 1);
        int readLen = AAsset_read(asset, imgBuff, bufferSize);
        LOGD("Picture read: %d", readLen);

        loadDataFromBuffer(imgBuff, readLen);

        if (imgBuff) {
            free(imgBuff);
            imgBuff = NULL;
        }
        AAsset_close(asset);
    }

 

标签:assets,AAsset,imgBuff,asset,jni,bufferSize,android,读取
From: https://www.cnblogs.com/tony-yang-flutter/p/18400626

相关文章

  • android从java/kotlin层传递bitmap给jni并使用其像素
    一、概述在做jni开发的时候,有些情况下会直接通过java/kotlin层传递bitmap给jni,并取出其数据进行利用。例如:OpenGLES绘制纹理、保存像素图片等。二、代码示例1.在cmake中引入可以操作jni层BitmapInfo的libjnigraphics-landroid2.导入头文件#in......
  • Android 11.0 FolderIcon文件夹图标内预览图标超出边距解决方案
    1.前言在11.0的系统rom定制化产品开发中,在进行Launcher3的功能定制化过程中,在实现文件夹功能的时候,由于产品分辨率等原因在拖拽图标进文件夹的时候,在3*3的布局中,会发现图标出了folder边距,所以就需要分析相关的功能,然后实现解决这个问题2.FolderIcon文件夹图标内预览图标超......
  • 基于Android的B2B电影电商平台系统: 电影管理系统:基于Android的电影平台系统
     目录一.研究目的1.1研究背景1.2研究目的二.系统需求分析三.​​​​​​整体架构设计四.页面展示五.源码获取方式一.研究目的1.1研究背景据了解,以美国为首的国外电影产业早已形成机制健全、信息充分流通的产业链生态圈,其行业利润不仅仅依靠票房,而是通过衍生品......
  • 使用 Android Lua Helper 在VSCODE中调试安卓Lua应用
    一、VSCODE与AndroidLuaHelper的功能特点VisualStudioCode(VSCODE)是一款功能强大的代码编辑器,它以其高度可定制的界面、强大的扩展生态系统、流畅的性能表现以及对众多编程语言的天然支持而备受开发者青睐。在众多的开发场景中,VSCODE都展现出了卓越的性能和灵活性。Lua......
  • 驱动编写——《Android深度探索(卷1):HAL与驱动开发》笔记
    设备驱动大致骨架驱动代码.c文件#include<linux/module.h>#include<linux/init.h>#include<linux/slab.h>//使用kmalloc就需要includestaticunsignedcharmen[100000];//设备文件file,buf数据位置,count可读字节数,ppos偏移量staticssize_t驱动读函数(structfile*......
  • Android平台通过RTSP服务实现摄像头麦克风共享
    技术背景前些年,我们在完成Android平台RTMP直播推送模块后,遇到这样的技术需求,好多开发者希望在Android平台,实现摄像头和麦克风音视频数据采集编码打包后,对外提供RTSP(RealTimeStreamingProtocol)服务。通常,这样的技术需求,需要通过集成支持RTSP服务功能的库或自己实现轻量级的RTSP服......
  • Android开发 - Matrix 处理图像变换解析
    Matrix是什么Matrix是一个用于处理图像变换的类,它可以对图像进行缩放、旋转、平移和倾斜等操作。通俗来讲,Matrix就像是一个数学公式,用来定义如何改变图像的位置、形状或者方向Matrix的主要功能缩放(Scale):可以改变图片的大小,比如放大或缩小旋转(Rotate):可以将图片绕某个......
  • Android BLE & BluetoothGattCallback.onServicesDiscovered不回调或部分回调解决
    A.如题,调用BluetoothGatt.discoverServices()返回true了,但是一直没走到onServicesDiscovered回调中,用Ble调试蓝牙助手测试了,也是一样的情况,所以应该是外设的问题,但是ios的没问题,蓝牙处理还是有差别,网上有一种方式说是延迟去多discoverServices几次,可能可以找到,尝试了一下还是不行......
  • Android平台RTSP|RTMP播放器之视音频效果设置
    RTSP|RTMP播放器模块是大牛直播SDK的SmartMediaKit下非常优异的子产品,功能丰富、性能优异,毫秒级超低延迟,支持Windows、Linux(x86_64|aarch64架构)、Android、iOS平台。先看demo主界面,可以通过界面,做基础的设置,比如旋转、镜像等操作。下面就视音频效果,做个大概的介绍。视频填充效果:......
  • Android之JNI开发
    JNIJNI是JavaNativeInterface的缩写,俗称Java本地接口,是Java语言提供的用于Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以通过JNI调用Java代码。那什么场景下可能会用到JNI呢?1、需要提升性能时,比如说做一些底层的开发,例如音视频处理之类......