You need to enable JavaScript to run this app.
文档中心
文档控制台
免费开始使用
veImageX

veImageX

复制全文
下载 pdf
Android 编解码库
集成 HEIF 解码库
复制全文
下载 pdf
集成 HEIF 解码库

本文为您介绍 veImageX 自研 Android 端 HEIF 解码库的接入流程。

适用版本

本文档适用于 Android 4.0 及以上开发版本。

前提条件

您已完成独立 HEIF 编解码库的集成准备

注意事项

不支持对使用 Grid 编码生成的带有 aplha 通道的 heif 图进行解码处理。

添加 Maven 仓库

确保 project 根目录下的build.gradle下配置服务,代码示例如下所示:

maven {
    url 'https://artifact.bytedance.com/repository/Volcengine/'
    // 最新版本号获取地址:https://artifact.bytedance.com/repository/Volcengine/
}

获取 SDK 最新版本号

请参考发布历史,获取 SDK 最新版本号。

添加 SDK 依赖

在 module 目录下的build.gradle文件中的dependencies中添加 SDK 依赖,并填入获取的最新版本号。代码示例如下所示:

implementation 'com.bytedance.fresco:authorization:xxx'//添加授权认证+云控配置
implementation 'com.bytedance.fresco:nativeheif:xxx' //heif 解码

说明

请确保您添加的 SDK 各依赖版本号一致。

配置授权

在自定义的ApplicationonCreate方法中执行以下代码:

List<String> encodedAuthCode = new ArrayList<>();
encodedAuthCode.add("xxxxxxxxxxxxxxxxxxxxxxxxx");

InitConfig initConfig = new InitConfig(
        this,             // Application Context
        "000000",         // App id, 如实填写
        "sample",         // App Name,暂未用到,传入app名称
        "debug",          // channel,暂未用到,传入例如OPPO 
        "0.0.1",          // App的versionName, 如实填写
        "1",              // App的versionCode, 如实填写
        "48144589260",    // device id,暂未用到
        InitConfig.CHINA, // App上线的区域,如实填写
        "M2ZmYzkzZjUtN2", // Token,如实填写,您可在 接入准备-购买授权 获取Token
        encodedAuthCode   // 授权码List<String>,如实填写,您可在 接入准备-购买授权 获取授权码
);
CloudControl.init(initConfig);

解码示例

使用 HEIF 解码,代码示例如下所示:

byte[] data; // 图片原始数据
int[] meta = Heif.parseSimpleMeta(data, data.length);
HeifData heifData = Heif.toRgba(data, data.length, true, 1, 0, 0, meta[1], meta[0]);
Bitmap bitmap = heifData.newBitmap(null);

解码接口介绍

  • com.bytedance.fresco.nativeheif.Heif 类

com.bytedance.fresco.nativeheif.Heif为解码 HEIC 静图的接口类,可将原图解码为 rgba、rgb565 数据。

/**
 * 将原始图片解码为 rgba 数据。
 * @param data 图片原始数据
 * @param size 数据大小
 * @param wpp 暂未使用,请传入 false
 * @param inSample 降采样,取值>=1
 * @param x 解码起始的横坐标,请勿超过图片边界
 * @param y 解码起始的纵坐标,请勿超过图片边界
 * @param height 期望解码的高度,与y坐标结合使用,请勿超过图片边界
 * @param width 期望解码的宽度,与x坐标结合使用,请勿超过图片边界
 * @return 对解码后的byte[]数据的封装,要转为Bitmap,请调用HeifData.newBitmap()接口
 */
public static native HeifData toRgba(byte[] data, int size, boolean wpp, int inSample, int x, int y, int height, int width);

/**
 * 将原始图片解码为 rgb565 数据。
 * 参数意义和 toRgba 相同
 */
public static native HeifData toRgb565(byte[] data, int size, boolean wpp, int inSample, int x, int y, int height, int width);

/**
 * @param data 图片原始数据
 * @param size 数据大小
 * @return meta 数据,数组元素 10 个,值依次表示:宽,高,图片角度(顺指针角度,取值0,90,180,270),是否为动图(0:静图,1:动图),动图时长,是否含有缩略图(0:没有,1:有),缩略图下标,缩略图大小,是否含有透明通道(0:没有,1:有),位深。
 */
public static native int[] parseSimpleMeta(byte[] data, int size);

/**
 * @param data 图片原始数据
 * @param isRgba 是否有透明通道,true:有透明通道;false:无透明通道
 * @param inSample 降采样,取值>=1
 * @return Bitmap对象 采用该方法可以解决带icc信息的heic图色差问题 (1.1.0.1-tob及之后版本支持)
 */
public static Bitmap getBitmap(byte[] data, boolean isRgba, int inSample);
  • com.bytedance.fresco.nativeheif.HeifData 类

com.bytedance.fresco.nativeheif.HeifData为解码后数据的封装类。

public class HeifData {
    public final byte[] data; // 解码后的字节数据
    public final int width;   // 解码后图片的宽
    public final int height;  // 解码后图片的高

    /** 
     * 将byte[]字节数据转为 bitmap。
     * @param config Bitmap.Config,如果传入null则默认使用Bitmap.Config.ARGB_8888
     * @return Bitmap
     */
    public Bitmap newBitmap(Config config) {}
}
最近更新时间:2024.09.26 19:40:43
这个页面对您有帮助吗?
有用
有用
无用
无用