鸿蒙(API 12 Beta3版)【使用Image完成图片编码】图片开发指导依赖JS对象

news2024/9/23 15:27:36

开发者可以调用本模块的Native API接口,完成图片编码,即将PixelMap压缩成不同格式的存档图片。

当前支持编码为JPEG、WebP 和 PNG 格式。

适用场景

  • 图片编码转换。

    通过传入图片源ImageSource,封装成想要的格式。

  • 图片编辑

    编辑PixelMap后导出图片文件的场景,需要编码成对应图片格式文件。

开发指导

参考以下示例代码,完成图片编码的全流程,包括:创建编码器,初始化资源,编码过程,销毁资源。

在应用开发过程中,开发者应按一定顺序调用方法,执行对应操作,否则系统可能会抛出异常或生成其他未定义的行为。具体顺序可参考下列开发步骤及对应说明。

如下为图片编码调用关系图:

1

在 CMake 脚本中链接动态库

target_link_libraries(sample PUBLIC libimage_packer_ndk.z.so)

开发步骤

  1. 引入编码器头文件:image_packer_mdk.h。
// 引入编码器image_packer_mdk.h头文件。
#include "multimedia/image_framework/image_packer_mdk.h"
  1. 创建编码器实例对象。

    应用需要napi_env来创建编码器。

// 使用napi_value 承接创建的编码器对象
napi_value packer;
// 通过 napi_env 创建编码器,返回result为 IMAGE_RESULT_SUCCESS则创建成功
int32_t result = OH_ImagePacker_Create(env, &packer);
  1. 初始化资源。

    通过OH_ImagePacker_InitNative来初始化编码器原生实例对象。

// 通过 napi_env 及上述创建的编码器对象初始化原生实例对象
ImagePacker_Native* nativePacker = OH_ImagePacker_InitNative(env, packer);
  1. 编码。

    编码接口入参包括:

    • 上述过程中获取的实例对象(ImagePacker_Native)。

    • 需要编码的图像源(napi_value), PixelMap或ImageSource(未调用过CreatePixelMap)的实例对象均可。

    • 编码参数:包括编码格式与编码质量。

说明

根据MIME标准,标准编码格式为image/jpeg。当使用image编码时,编码参数中的编码格式format设置为image/jpeg,image编码后的文件扩展名可设为.jpg或.jpeg,可在支持image/jpeg解码的平台上使用。

编码接口可按输出方式分为向缓存区(内存)输出和向文件输出两种接口,入参均为上述内容。

应用可根据输出的不同需求选择编码接口。

例如向缓存区(内存)输出:

// 编码参数
struct ImagePacker_Opts_ opts;
// 配置编码格式(必须)
opts.format = "image/jpeg";
// 配置编码质量(必须)
opts.quality = 100;
// 配置输出的缓存区大小为4k(缓存区大小视应用场景定)
size_t bufferSize = 4*1024;
// 申请图片编码缓存区
uint8_t* outData = (uint8_t *)(malloc(bufferSize));
// 开始对输入source进行编码过程,返回result为 IMAGE_RESULT_SUCCESS则编码成功,同时bufferSize中包含编码实际使用缓存区大小
int32_t result = OH_ImagePacker_PackToData(nativePacker, source, &opts, outData, &bufferSize);

例如向文件输出:

// 编码参数
struct ImagePacker_Opts_ opts;
// 配置编码格式(必须)
opts.format = "image/jpeg";
// 配置编码质量(必须)
opts.quality = 100;
// 打开需要输出的文件(请确保应用有权限访问这个路径)
int fd = open("/data/test.jpg", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd >= 0) {
   // 开始对输入source进行编码过程,返回result为 IMAGE_RESULT_SUCCESS则编码成功
   int32_t result = OH_ImagePacker_PackToFile(nativePacker, source, &opts, fd);  
   // 关闭输出文件  
   close(fd);
}
  1. 销毁编码器实例,释放资源。

说明

资源不能重复销毁。

// 调用OH_ImagePacker_Release, 销毁编码器
int32_t ret = OH_ImagePacker_Release(nativePacker);
if (result != IMAGE_RESULT_SUCCESS) {
    // 异常处理
} else {
    nativePacker = NULL; //不可重复destroy
}

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C# 】使用List<实体类>

1. 使用List<实体类> 要在C#中使用List<EntityTemp>并实现查找数据输出&#xff0c;首先需要定义EntityTemp类&#xff0c;并创建一个List<EntityTemp>类型的列表。然后&#xff0c;你可以使用LINQ或其他方法来查找和输出数据。 假设EntityTemp类具有一个…

最新最全的Pytest接口自动化测试框架教程

pytest编写的规则&#xff1a; 1、测试文件以test_开头&#xff08;以_test结尾也可以&#xff09; 2、测试类以Test开头&#xff0c;并且不能带有__init__方法 3、测试函数以test_开头 4、断言必须使用assert pytest.main([-s,-v]) &#xff1a;用来执行测试用例 -s 打印prin…

pcdn闲置带宽被动收入必看教程。第六讲:交换机配置实战篇

pcdn闲置带宽被动收入必看教程。第六讲&#xff1a;交换机配置实战篇 本章节将介绍如何通过简单的步骤配置交换机&#xff0c;以汇聚所有宽带并集中管理速率&#xff0c;最终接入服务器或软路由&#xff0c;实现远程管理分配速率给具体的服务器或小主机等。 交换机配置步骤 1…

Redis:Redis为什么快

文章目录 一、Redis为什么快二、Redis的单线程模型三、高效的数据结构1、跳表 四、内存的高效使用五、I/O多路复用机制六、网络优化 一、Redis为什么快 单机的Redis每秒可以支撑十几万的并发&#xff0c;相对于MySQL来说&#xff0c;性能是MySQL的十几倍。速度快主要有一下因素…

Docker快速上手

Docker 前言一、基本组成二、常用命令2.1 Docker服务2.2 image相关命令2.3 Container相关命令 三、Docker Volume 容器卷3.1 匿名挂载3.2 具名挂载 四、Docker 网络模式4.1 bridge桥接模式4.2 host主机模式4.3 None模式4.4 Container模式4.5 Customer模式 前言 本篇文章不再赘…

2024计算机技术与软件专业技术资格考试-系统规划与管理(高级)

2024年报名时间&#xff1a;2024年8月22日10:00-9月2日16:00 2024年考试时间&#xff1a;2024年11月9日-11月12日 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试是原中国计算机软件专业技术资格和水平考试&#xff08;简称软件考试&#xff09;的完善与发展。…

windows 10x64 22H2专业纯净版2028.8.24

Windows 10 22H2专业版19045.3208&#xff0c;据传这版最稳定&#xff0c;速度快。原版制作&#xff0c;打齐KB5028166和服务堆栈更新KB5028318补丁。 禁用了系统升级&#xff0c;删除Windows Defender&#xff0c;禁用打印机服务&#xff0c;需要安装打印机的自行打开服务Prin…

逆序对的数量——归并排序

逆序对的数量 归并排序的解法&#xff0c;今天自己拿前台样例模拟了一遍才算是入门了归并排序的感觉 #include<bits/stdc.h>using namespace std; typedef long long ll; const int N1e510; int a[N]; int temp[N]; int k;ll mergesort(int q[],int l,int r) {if(l>r)…

string类的使用与实现

标准库中的string类 string类(了解) string类的文档介绍 注意&#xff1a;在使用string类时&#xff0c;必须包含#include头文件以及using namespace std; auto和范围for 在了解string的用法前在学习一个知识&#xff1b; auto关键字 auto是作为一个新的类型指示符来指示编译器…

若依AjaxResult的get(AjaxResult.CODE_TAG)有时返回的200,有时返回的字符串“200“

这个项目是多模块项目&#xff0c;之前通过web json格式&#xff0c;多模块之前传输用的RestTemplate&#xff0c;但是对接其它系统时要用XML就添加了XML的依赖。 原来 原来ajaxResult.get(AjaxResult.CODE_TAG).equals(200)能返回true&#xff0c; 现在get(AjaxResult.CODE…

3.2.6 盘古开天地start_kernel

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 3.2 内核初始化(盘古开天地) 3.2.1 内核初始化的神话 3.2.2 从头 (Head)开始 3.2.3 从头初始化到身体 3.2.4 宇之内存的空分复用 3.2.5 宙之CPU的时分复用 3.2.6 盘古开天地start_kernel 3.2.6 盘古开天地start_…

abc 366 E+F(曼哈顿距离 x y 两个坐标分别计算)(贪心+01背包)

E题&#xff1a; 题意&#xff1a;给定的 xi yi 。求有多少点 到给人 若干定点 的曼哈顿距离 和 小于等于D. 因为D 最大时 1e6,-1e6<xi<1e6。 所以 可能的 点 的 x 的范围是 [-2e6 2e6] 同理 y 的 范围 一样。 将 x y 分开讨论。 我们可以枚举 某个x 的 个数&#xff0…

聚类:k-Means 和 k-Medoid

1. 前言 在《对静态分析缺陷报告进行聚类&#xff0c;以降低维护成本》 提到使用 k-Medoid 通过相似缺陷的聚类&#xff0c;来减少程序员对大量缺陷分析的工作量。 k-Medoid 和传统的 k-Means 聚类算法有什么差别呢&#xff1f; 简单的说&#xff0c;K-Medoid 算法是一种基于…

golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法

golang中 RSA解密前端&#xff08;jsencrypt&#xff09;发来的密文后出现 "crypto/rsa: decryption error" &#xff0c; 这个问题首先需要确认你的私匙和公匙是否匹配&#xff0c; 如果匹配 那检查入参数据类型&#xff0c; 前端发送来的rsa加密后的数据一般都是…

《黑神话:悟空》到底是用什么语言开发的

《黑神话&#xff1a;悟空》&#xff08;Black Myth: Wukong&#xff09;是一款由中国游戏开发公司游戏科学&#xff08;Game Science&#xff09;开发的动作角色扮演游戏。该游戏主要使用了以下技术栈&#xff1a; 开发引擎&#xff1a;游戏科学公司使用了**虚幻引擎5&#x…

blender--二维平面图标变为三维网格

有时候我们希望把一些二维图片能变成三维网格&#xff0c;本案例我们就针对这一场景进行实现。 首先我们可以先去找一张需要的图片(注意&#xff0c;本例需要图片是svg格式)&#xff0c;我们可以在阿里巴巴矢量图标库等平台进行搜索&#xff0c;如图所示&#xff0c;找到需要的…

Python优化算法12——蝴蝶优化算法(BOA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

ProtoBuf简要介绍与快速上手使用(C++版)

文章目录 一、 初识ProtoBuf1. 序列化和反序列化概念2. ProtoBuf是什么3. ProtoBuf的使用特点 二、 讲解说明三、 快速上手1. 创建 .proto 文件2. 编译 contacts.proto 文件&#xff0c;生成C文件3. 序列化与反序列化的使用4. 小结 ProtoBuf 使用流程 一、 初识ProtoBuf 1. 序…

线程是什么?和进程区别是什么?怎么用?

目录 一、什么是进程 二、什么是线程 总结&#xff1a;线程和进程的区别&#xff1f; 三、线程的使用 四、线程的调用 一、什么是进程 进程&#xff0c;也叫任务。就是正常执行的程序。 一个程序有两种状态&#xff1a; 一是没有被执行&#xff0c;在硬盘上躺着的软件&…

Qt Example Callout Extention(about QChart/QGraphicsView/QGraphicsItem)

问题 Qt Example callout 展示了在平面直角坐标系中画tips。知识点涉及到QChart/QGraphicsView/QGraphicsItem。如何在平面直角坐标系中画点、折线、圆、长方形&#xff1f; Example路径 D:\Qt\5.15.2\Src\qtcharts\examples\charts\callout\callout.cpp 代码 main #incl…