鸿蒙媒体开发系列15——图片解码(PixcelMap)

news2024/12/23 1:40:37

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。

1、概述

应用开发中的图片开发是对图片像素数据进行解析、处理、构造的过程,达到目标图片效果,主要涉及图片解码、图片处理、图片编码等。

在学习图片开发前,需要熟悉以下基本概念。

  • 图片解码

    指将所支持格式的存档图片解码成统一的PixelMap,以便在应用或系统中进行图片显示或图片处理。当前支持的存档图片格式包括JPEG、PNG、GIF、RAW、WebP、BMP、SVG。

  • PixelMap

    指图片解码后无压缩的位图,用于图片显示或图片处理。

  • 图片处理

    指对PixelMap进行相关的操作,如旋转、缩放、设置透明度、获取图片信息、读写像素数据等。

  • 图片编码

    指将PixelMap编码成不同格式的存档图片(当前仅支持JPEG和WebP),用于后续处理,如保存、传输等。

图片开发的主要流程如下图所示。

图片

  1. 获取图片:通过应用沙箱等方式获取原始图片。

  2. 创建ImageSource实例:ImageSource是图片解码出来的图片源类,用于获取或修改图片相关信息。

  3. 图片解码:通过ImageSource解码生成PixelMap。

  4. 图片处理:对PixelMap进行处理,更改图片属性实现图片的旋转、缩放、裁剪等效果。然后通过Image组件显示图片。

  5. 图片编码:使用图片打包器类ImagePacker,将PixelMap或ImageSource进行压缩编码,生成一张新的图片。

我们先讨论图片解码(把图片转换成PixcelMap对象)。

2、图片解码

图片解码指将所支持格式的存档图片解码成统一的PixelMap,以便在应用或系统中进行图片显示或图片处理。当前支持的存档图片格式包括JPEG、PNG、GIF、RAW、WebP、BMP、SVG。

2.1、开发步骤

a)全局导入Image模块。

import image from '@ohos.multimedia.image';

b)获取图片

👉🏻 方法一:获取沙箱路径。

const context = getContext(this);const filePath = context.cacheDir + '/test.jpg';

👉🏻 方法二:通过沙箱路径获取图片的文件描述符。​​​​​​​

import fs from '@ohos.file.fs';// ... const context = getContext(this);const filePath = context.cacheDir + '/test.jpg';const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);const fd = file?.fd;

👉🏻 方法三:通过资源管理器获取资源文件的ArrayBuffer​​​​​​​

const context = getContext(this);// 获取resourceManager资源管理器const resourceMgr = context.resourceManager;const fileData = await resourceMgr.getRawFileContent('test.jpg');// 获取图片的ArrayBufferconst buffer = fileData.buffer;

c)创建ImageSource实例

👉🏻 方法一:通过沙箱路径创建ImageSource。​​​​​​​

// 获取文件路径const context = getContext(this);const filePath = context.cacheDir + '/test.jpg';// 创建实例const imageSource = image.createImageSource(filePath);

👉🏻 方法二:通过文件描述符fd创建ImageSource。​​​​​​​

const context = getContext(this);const filePath = context.cacheDir + '/test.jpg';const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);const fd = file?.fd;// fd为已获得的文件描述符const imageSource = image.createImageSource(fd);

👉🏻 方法三:通过资源管理器获取资源文件的ArrayBuffer​​​​​​​

const context = getContext(this);// 获取resourceManager资源管理器const resourceMgr = context.resourceManager;const fileData = await resourceMgr.getRawFileContent('test.jpg');// 获取图片的ArrayBufferconst buffer = fileData.buffer;
const imageSource = image.createImageSource(buffer);

d)设置解码参数DecodingOptions,解码获取PixelMap图片对象。​​​​​​​

let decodingOptions = {    editable: true,    desiredPixelFormat: 3,}// 创建pixelMap并进行简单的旋转和缩放 const pixelMap = await imageSource.createPixelMap(decodingOptions);

3、demo

对资源文件中的图片进行编码​​​​​​​

// 1. 获取ResourceManager资源管理const context = getContext(this);// 获取resourceManager资源管理const resourceMgr = context.resourceManager;
// 2. 获取rawFile文件夹下test.jpg的ArrayBufferconst fileData = await resourceMgr.getRawFileContent('test.jpg');// 获取图片的ArrayBufferconst buffer = fileData.buffer;
// 3. 创建imageSourceconst imageSource = image.createImageSource(buffer);
// 4. 创建PixelMapconst pixelMap = await imageSource.createPixelMap();

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

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

相关文章

【Linux】Docker下载与使用-nginx

目录 一、Docker介绍 二、Docker结构 三、下载Daocker 1. 在linux上下载docker,执行以下命令即可: 2. 开启docker 3. 执行以下操作并进行使用 四、在Docker上安装nginx 一、Docker介绍 Docker:是给予Go语言实现的开源项…

开发者福音!一个小型热门项目,可以在线优雅快速生成 SQL 和模拟数据(带私活源码)

GitHub上开源了一个小型热门项目,可以在线快速生成SQL和模拟数据。 这对于前端开发的同学来说,简直是一大福音,可以大幅提升调试效率。 以后,再不用等后端同学开发完数据接口再进行下一步。 一起来看看吧! 项目介绍…

react-问卷星项目(2)

流程 husky 一个git hook 工具,即在git commit之前执行自定义的命令,将规范流程化,如执行代码风格的检查,避免提交非规范的代码,在github搜索即可。 这两条是接着执行的,表示创建husky,在文档…

Linux系统安装和配置 VNC 服务器

文章目录 1.安装 GNOME 桌面环境2.安装 VNC 服务器(tigervnc-server)3.为本地用户设置 VNC 密码4.设置 VNC 服务器配置文件5.启动 VNC 服务并允许防火墙中的端口 1.安装 GNOME 桌面环境 [rootserver6 ~]# dnf groupinstall "workstation" -y成…

太速科技-389-基于KU5P的双路100G光纤网络加速计算卡

基于KU5P的双路100G光纤网络加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm KU5P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x8智能加速计算卡,该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…

C#绘制动态曲线

前言 用于实时显示数据动态曲线,比如:SOC。 //用于绘制动态曲线,可置于定时函数中,定时更新数据曲线 void DrawSocGraph() {double f (double)MainForm.readData[12]; //display datachart1.Series[0].Points.Add(f);if (ch…

iLogtail 进化论:重塑可观测采集的技术边界

作者:余韬(迅飞) 采集代理发展回顾 iLogtail 作为一款开创性的轻量级日志采集器,历经 13 载风雨,始终致力于高效地从多元化的数据源中萃取、处理可观测信息,并无缝传输至阿里云日志服务或各类日志分析平台。今年,适逢…

828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评

目录 一、Flexus X实例云服务器简介 1.1 产品摘要 1.2 产品优势 1.3 本次测评服务器规格 二、CPU性能测试 2.1 操作说明 2.2 操作步骤 2.2 结果分析 三、测试内存负载 3.1 操作说明 3.2 操作步骤 3.3 结果分析 四、测试终评 一、Flexus X实例云服务器简介 1.1 产品…

算法:852.山脉数组的峰顶索引

题目 链接:leetcode链接 思路分析(二分算法) 题目的提示已经非常明显了,使用O(logN)的算法,那就是二分算法。 如何寻找二段性? 观察数据,可以发现,需要找的峰顶索引的左右两侧数…

【C++算法】6.双指针_有效三角形的个数

文章目录 题目链接:题目描述:解法C 算法代码:图解: 题目链接: 611.有效三角形的个数 题目描述: 解法 数学知识: 给我们3个数,判断是否能够构成三角形。 平时:ab>c&am…

PostgreSQL数据库与PostGIS在Windows中的部署与运行

本文介绍在Windows电脑中,下载、安装、部署并运行PostgreSQL与PostGIS数据库服务的方法。 PostgreSQL是一种功能强大的开源关系型数据库管理系统(RDBMS),以其稳定性、可靠性和丰富的功能而闻名;其支持多种高级特性&…

Linux命令一文速通速成

目录 嵌入式Linux的组成 Linux的介绍 Linux和发行版本 Linux应用 Linux特点 Linux发行版 GNU Linux目录结构 为什么要使用Linux命令? 登录 ​编辑 说明 shell是什么? bash shell Linux命令格式 命令格式举例 命令中的其他组成 Linux系统…

一文上手SpringSecurity【一】

一、概述 1.1 安全框架概述 作为企业级应用,都存在着各式各样的认证(用户基本信息认证、第三方认证、LDAP认证)与权限(访问权限、数据权限)需求,他们作为系统整体架构的基础建设部分,决定了产…

[通信原理]确知信号1:傅里叶分析 × 确知信号

傅里叶分析 对于周期函数可以用直流分量、正弦函数和余弦函数构成的无穷级数来表示,这些函数是正交的,意味着它们之间没有任何相关性。‌ 必须指出,并非任意周期信号都能进行傅里叶级数展开,函数需满足狄利赫里条件才能被展开。…

npj Climate and Atmospheric Science I 新疆生地所陈亚宁研究员团队孙帆博士后发表最新研究进展

题目:The dominant warming season shifted from winter to spring in the arid region of Northwest China 主导中国西北干旱区升温的季节已从冬季转变为春季 期刊:npj Climate and Atmospheric Science IF及分区:实时IF/JCR分区/中科院分…

土耳其阿纳多卢通讯社 (土耳其官方通讯社AnadoluAgency)发布新闻稿-新闻媒体分发平台

土耳其阿纳多卢通讯社 (土耳其官方通讯社AnadoluAgency)发布新闻稿-分发 大舍传媒 土耳其阿纳多卢通讯社(Anadolu Agency)创建于1920年,是土耳其的主要通讯社之一。它不仅在国家层面上发挥重要作用,还通过…

React学习笔记(2.0)

React事件绑定 语法:在对应标签上书写on事件(比如onClick,onChange),注意和原生的事件区分,React的事件首字母要大写。 const handleChange(e:any)>{console.log(e);console.log(change事件触发);// e不是原生事件…

2、Spring Boot 3.x 集成 Feign

一、前言 本篇主要是围绕着两个点,1、集成 Feign,2、分离feign接口层,独立服务; 还有一点就是上篇文章的服务 iot-channel、system-server 服务名称调整成为了 chain-iot-channel、chain-system二、搭建 chain-common 服务 pom.…

推荐5款ai论文写作常用软件分享!轻松一键生成

在当前的学术研究和写作领域,AI论文写作工具的应用越来越广泛。这些工具不仅能够提高写作效率,还能帮助研究人员快速生成高质量的论文内容。以下是五款值得推荐的AI论文写作软件,它们可以帮助你轻松一键生成高质量的论文初稿。 一、千笔-AIP…

【IEEE PDF eXpress】格式不对

目录 一、问题二、解决方法 一、问题 word的文档,用IEEE PDF eXpress网站生成pdf后,提交论文出现错误: Document validation failed due to the following errors: Content exceeds IEEE template margins for its format (Page 1:Bottom).…