杰理 SDK 文档中心
首页
首页
  • 快速开始

    • 环境要求与权限配置
    • 集成SDK依赖
    • 运行示例应用
  • 核心架构与协议

    • RCSP协议与数据通道
    • 蓝牙连接与设备管理
    • TWS双耳功能
    • 基础功能接口与自定义命令
  • 设备功能控制

    • 设备音乐控制与ID3信息
    • 文件浏览与传输
    • FM收音与发射
    • 灯光控制
    • 闹钟与时间管理
    • 查找设备与防丢
    • ANC与噪声处理
    • 按键功能设置
    • 彩屏仓控制
    • AI翻译
  • 音效与音频处理

    • 均衡器音效调节
    • 录音与语音控制
    • Line-in、SPDIF与声卡功能
    • 音频编解码库
  • 扩展功能库

    • OTA固件升级
    • 数据加密与解密
    • 图片与动图格式转换
  • 示例应用 btsmart

    • 应用架构与界面导航
    • 设备功能适配与数据层
    • 设备配置JSON与资源文件
  • 参考与版本

    • 错误码参考
    • 版本历史与更新日志
    • 开发文档中心导航

图片与动图格式转换

该能力负责将常规图片与动图转换为 JL(杰理)蓝牙设备端可显示的格式(BMP、GIF 等),位于 extension-libs/image-convert 目录,仓库中对应实现与演示位于 btsmart 模块的 demo/convert 包下。

目的与范围

本页面向“图片与动图格式转换”这一能力,说明它在 JL 蓝牙 SDK 生态中的用途、相关源文件位置、典型转换流程与边界情况。页面边界如下:

  • 属于本页:BMP 格式转换演示(BmpDemo.java)、GIF 动图转换演示(GifDemo.java)及其背后的格式转换机制。
  • 不属于本页:Room 数据库持久化层的 IntArrayConverter(仅用于 Room 实体字段的类型转换,与图片格式转换无关,只在相关链接中提及);设备协议解析、OTA 升级、音频播放等其他能力请参见各自目录页。

说明:本次文档编写受源读取预算限制,未能逐行读取演示文件的完整实现。文中明确标注“未在源码中验证”的内容,请以仓库源码为准。

概述

JL(杰理)蓝牙方案常见于智能手表、音箱、带屏设备等产品。这类设备通常带有小尺寸 LCD 屏幕,需要通过蓝牙从手机端下发图片/动图数据用于:

  • 表盘、壁纸、主题图片显示;
  • 来电头像、消息提醒图片显示;
  • 动画表情、开机动画等动态内容展示。

由于设备端资源受限(内存小、解码能力弱),手机端需要先把常规格式图片(PNG/JPEG 等)转换为设备支持的位图格式(典型为 BMP)或动图格式(典型为 GIF),再通过 JL 协议通道下发。demo/convert 包下的两个演示类就是这一转换链路的示例入口:

文件用途(依据命名与所在包推断)
BmpDemo.java演示将图片转换为 BMP 位图格式
GifDemo.java演示 GIF 动图格式的转换/处理

两个演示类位于 btsmart 模块的 test 源码集(src/test/java),说明它们是开发/验证用途的示例代码,而非打包进正式 APK 的业务逻辑。

架构

以下是依据仓库中已确认的文件结构绘制的组件关系图:

flowchart TD
    subgraph sg_Btsmart["btsmart 应用模块"]
        subgraph sg_Main["src/main/java"]
            App["主应用与业务逻辑"]
        end
        subgraph sg_Test["src/test/java"]
            subgraph sg_Demo["demo/convert 包"]
                BmpDemo["BmpDemo.java<br/>BMP 格式转换演示"]
                GifDemo["GifDemo.java<br/>GIF 动图转换演示"]
            end
        end
        subgraph sg_Room["tool/room/converter 包"]
            IntArrayConverter["IntArrayConverter.java<br/>(Room 类型转换,相邻主题)"]
        end
    end
    BmpDemo -->|"读取/输出位图数据"| App
    GifDemo -->|"读取/输出动图数据"| App
    App -->|"通过蓝牙协议下发"| Device["JL 蓝牙设备屏幕"]
    IntArrayConverter -.->|"仅供 Room 持久化使用,非本页主题"| App

说明:

  • BmpDemo.java 与 GifDemo.java 同处 demo/convert 包,是图片转换能力在测试源码集中的两个入口示例;
  • 转换后的位图/动图数据最终经应用层协议下发到 JL 设备端显示;
  • IntArrayConverter 位于 tool/room/converter 包,属于 Room 实体字段的类型转换器,与本页主题无直接关系,仅作交叉引用,避免读者混淆。

核心流程

图片/动图转换在 JL 蓝牙 SDK 中通常遵循“解码 → 转换 → 编码/裁剪 → 下发”的链路。以下流程图依据 demo/convert 的演示用途与 JL 设备显示链路推演,具体方法调用以源码为准:

flowchart TD
    Start([开始]) --> Source["读取源图片<br/>PNG / JPEG / GIF"]
    Source --> Decode["解码为 Bitmap<br/>(Android BitmapFactory)"]
    Decode --> Check{"目标格式?"}
    Check -->|"BMP"| BmpPath["转换为 BMP 位图<br/>(BmpDemo 演示)"]
    Check -->|"GIF 动图"| GifPath["解析/转换 GIF 帧<br/>(GifDemo 演示)"]
    BmpPath --> Fit["按设备屏幕参数裁剪/缩放"]
    GifPath --> Fit
    Fit --> Encode["编码为设备端字节流"]
    Encode --> Send["经 JL 蓝牙协议下发"]
    Send --> Device["设备屏幕显示"]
    Device --> End([结束])

关键点:

  1. 源格式解码:Android 侧使用系统解码能力将 PNG/JPEG/GIF 解析为 Bitmap 或帧序列;
  2. 目标格式选择:BMP 适合静态图片(表盘、头像),GIF 适合动态内容;
  3. 尺寸适配:设备屏幕分辨率有限,转换前需按目标尺寸缩放,避免带宽与设备内存浪费;
  4. 字节流下发:转换结果需按 JL 协议封包后走蓝牙通道,失败重传由协议层负责(详见相关页)。

使用示例

演示入口文件

两个演示类的完整实现位于 btsmart 模块测试源码集:

  • BmpDemo.java:BMP 格式转换演示;
  • GifDemo.java:GIF 动图转换演示。

No code example available:本次编写时源读取预算已用尽,未能读取上述文件正文,因此无法提供经过核实的代码摘录。请直接打开上方源码链接查看实际实现,切勿根据本页描述臆造 API。

如何运行演示

依据 src/test/java 的目录约定,两个演示类属于 JVM/设备端测试用例,可通过 Android Studio 的单元测试运行器直接执行 BmpDemo / GifDemo 的测试方法;具体入口方法名需查看源码确认(未验证)。

配置选项

由于本能力以演示代码(demo/convert)形式存在,未发现独立的配置类或配置文件。与格式转换相关的参数通常以方法参数/常量形式出现,常见于 JL SDK 的设备协议与图片工具类中:

选项类型默认值说明
目标图片宽度/高度int取决于设备屏幕转换前需按设备屏幕分辨率缩放
位图位深int24(RGB888)BMP 每像素位数,与设备显示能力相关
GIF 帧率/帧数int按源动图动图转换时需保留帧间隔信息
颜色格式enum/int未验证RGB565 / ARGB8888 等,影响设备解码

以上参数为 JL 设备显示场景的常规约束,具体默认值与取值需以设备协议文档及源码为准(未验证)。

API 参考

未验证:本次未能读取 BmpDemo.java / GifDemo.java 正文,无法给出经过核实的类签名、方法参数与返回值。请以仓库源码为权威依据:

  • BmpDemo.java
  • GifDemo.java

不提供臆造的签名,避免误导调用方。

失败模式、边界情况与并发

基于 Android 图片处理与 JL 蓝牙链路的通用约束,以下是该能力需要处理的典型风险点(部分内容为工程经验推断,需结合源码确认):

  • 超大图片 OOM:高分辨率 PNG/JPEG 直接解码可能触发 OutOfMemoryError,转换前应使用 BitmapFactory.Options.inSampleSize 采样或按目标尺寸缩放;
  • 不支持的颜色格式:设备若仅支持 RGB565,直接下发 ARGB8888 数据可能导致花屏,转换时必须显式指定位深;
  • GIF 帧解析失败:损坏或不完整的 GIF 源文件会导致帧序列解析中断,需对每帧解码结果判空;
  • 蓝牙传输中断:转换后的位图字节流较大,下发过程中断需要协议层支持断点重传,或拆分数据包;
  • 并发转换:若在正式业务中多线程并发转换并复用 Bitmap,需注意位图回收(recycle())与线程安全;演示代码通常为单线程,不存在该问题。

性能与运维注意事项

  • 格式转换是 CPU 密集型操作,应在后台线程执行,避免阻塞 UI 线程(BmpDemo/GifDemo 作为测试示例未体现线程策略,正式实现需自行处理);
  • BMP 为未压缩格式,转换结果体积远大于源文件,下发前务必按设备屏幕尺寸裁剪,否则会显著增加蓝牙传输耗时;
  • 动图转换(GIF)需要逐帧处理,帧数越多耗时越长,建议对动图做帧数上限控制。

扩展点

  • 新增格式支持:若需支持 WebP、PNG 位图等新格式,可在 demo/convert 包同级的工具类中新增转换方法,输出统一的设备字节流格式;
  • 复用转换结果:转换产物可作为 byte[] 缓存或写入本地文件,避免重复转换,降低耗时与功耗;
  • 接入正式业务:将演示代码中的转换逻辑抽取为工具类并补充异常处理、尺寸适配与线程池调度后,即可接入表盘设置、头像同步等正式功能。

测试

demo/convert 下的 BmpDemo.java 与 GifDemo.java 即本能力的测试/演示用例,位于 src/test/java,说明:

  • 转换逻辑以可运行示例形式验证,便于手动比对转换前后效果;
  • 测试源码集不随正式 APK 打包,验证完成即可作为开发参考保留。

更完整的自动化单元测试(如像素级校验、边界尺寸用例)未在本次检索范围内发现,建议补充。

相关链接

  • BmpDemo.java — BMP 格式转换演示
  • GifDemo.java — GIF 动图转换演示
  • IntArrayConverter.java — Room 持久化层的类型转换器(相邻主题,非本页范围)
  • 蓝牙协议下发与设备端显示链路:参见协议/设备相关目录页
  • 表盘与主题设置:参见对应功能页
Prev
数据加密与解密