HarmonyOS学习路之开发篇—多媒体开发(图像开发 一)

这篇具有很好参考价值的文章主要介绍了HarmonyOS学习路之开发篇—多媒体开发(图像开发 一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像开发概述

HarmonyOS图像模块支持图像业务的开发,常见功能如图像解码、图像编码、基本的位图操作、图像编辑等。当然,也支持通过接口组合来实现更复杂的图像处理逻辑。

基本概念

  • 图像解码

    图像解码就是不同的存档格式图片(如JPEG、PNG等)解码为无压缩的位图格式,以方便在应用或者系统中进行相应的处理。

  • PixelMap

    PixelMap是图像解码后无压缩的位图格式,用于图像显示或者进一步的处理。

  • 渐进式解码

    渐进式解码是在无法一次性提供完整图像文件数据的场景下,随着图像文件数据的逐步增加,通过多次增量解码逐步完成图像解码的模式。

  • 预乘

    预乘时,RGB各通道的值被替换为原始值乘以Alpha通道不透明的比例(0~1)后的值,方便后期直接合成叠加;不预乘指RGB各通道的数值是图像的原始值,与Alpha通道的值无关。

  • 图像编码

    图像编码就是将无压缩的位图格式,编码成不同格式的存档格式图片(JPEG、PNG等),以方便在应用或者系统中进行相应的处理。

约束与限制

为及时释放本地资源,建议在图像解码的ImageSource对象、位图图像PixelMap对象或图像编码的ImagePacker对象使用完成后,主动调用ImageSource、PixelMap和ImagePacker的release()方法。

图像解码开发

场景介绍

图像解码就是将所支持格式的存档图片解码成统一的PixelMap图像,用于后续图像显示或其他处理,比如旋转、缩放、裁剪等。当前支持格式包括JPEG、PNG、GIF、HEIF、WebP、BMP。

接口说明

ImageSource主要用于图像解码。

接口名

描述

create(String pathName, SourceOptions opts)

从图像文件路径创建图像数据源。

create(InputStream is, SourceOptions opts)

从输入流创建图像数据源。

create(byte[] data, SourceOptions opts)

从字节数组创建图像源。

create(byte[] data, int offset, int length, SourceOptions opts)

从字节数组指定范围创建图像源。

create(File file, SourceOptions opts)

从文件对象创建图像数据源。

create(FileDescriptor fd, SourceOptions opts)

从文件描述符创建图像数据源。

createIncrementalSource(SourceOptions opts)

创建渐进式图像数据源。

createIncrementalSource(IncrementalSourceOptions opts)

创建渐进式图像数据源,支持设置渐进式数据更新模式。

createPixelmap(DecodingOptions opts)

从图像数据源解码并创建PixelMap图像。

createPixelmap(int index, DecodingOptions opts)

从图像数据源解码并创建PixelMap图像,如果图像数据源支持多张图片的话,支持指定图像索引。

updateData(byte[] data, boolean isFinal)

更新渐进式图像源数据。

updateData(byte[] data, int offset, int length, boolean isFinal)

更新渐进式图像源数据,支持设置输入数据的有效数据范围。

getImageInfo()

获取图像基本信息。

getImageInfo(int index)

根据特定的索引获取图像基本信息。

getSourceInfo()

获取图像源信息。

release()

释放对象关联的本地资源。

普通解码开发步骤

1. 创建图像数据源ImageSource对象,可以通过SourceOptions指定数据源的格式信息,此格式信息仅为给解码器的提示,正确提供能帮助提高解码效率,如果不设置或设置不正确,会自动检测正确的图像格式。不使用该选项时,可以将create接口传入的SourceOptions设置为null。

ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
srcOpts.formatHint = "image/png";
// 此处传入用户自定义的图像路径
String pathName = "/sdcard/image.png";
ImageSource imageSource = ImageSource.create(pathName, srcOpts);
// 不通过SourceOptions指定数据源格式信息
ImageSource imageSourceNoOptions = ImageSource.create(pathName, null);

2. 设置解码参数,解码获取PixelMap图像对象,解码过程中同时支持图像处理操作。

  • 设置desiredSize支持按尺寸缩放,如果设置为全0,则不进行缩放。
  • 设置desiredRegion支持按矩形区域裁剪,如果设置为全0,则不进行裁剪。
  • 设置rotateDegrees支持旋转角度,以图像中心点顺时针旋转。

如果只需要解码原始图像,不使用该选项时,可将给createPixelMap传入的DecodingOptions 设置为null。

// 普通解码叠加缩放、裁剪、旋转
ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
decodingOpts.desiredSize = new Size(100, 2000);
decodingOpts.desiredRegion = new Rect(0, 0, 100, 100);
decodingOpts.rotateDegrees = 90;
PixelMap pixelMap = imageSource.createPixelmap(decodingOpts); 
// 普通解码
PixelMap pixelMapNoOptions = imageSource.createPixelmap(null);

3. 解码完成获取到PixelMap对象后,可以进行后续处理,比如渲染显示等。

渐进式解码开发步骤

1. 创建渐进式图像数据源ImageSource对象。

可以通过SourceOptions指定数据源的格式信息,此格式信息仅为提示,如果填写不正确,会自动检测正确的图像格式。使用IncrementalSourceOptions指定图像数据的更新方式为渐进式更新。

ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
srcOpts.formatHint = "image/jpeg";
ImageSource.IncrementalSourceOptions incOpts = new ImageSource.IncrementalSourceOptions();
incOpts.opts = srcOpts;
incOpts.mode = ImageSource.UpdateMode.INCREMENTAL_DATA;
ImageSource imageSource = ImageSource.createIncrementalSource(incOpts);

2. 渐进式更新数据。在未获取到全部图像时,支持先更新部分数据来尝试解码,调用updateData更新数据,将参数isFinal设置为false;当获取到全部数据后,最后一次更新数据时设置isFinal为true,表示数据更新完毕。设置解码参数同普通解码。

// 传入本地图片路径作为图像数据源
File file = new File("/sdcard/test.jpg");
FileInputStream fis = null;
try {
    fis = new FileInputStream(file);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] data = new byte[1024];
    int len = -1;
    while((len = fis.read(data)) != -1) {
        bos.write(data, 0, len);
    }
    byte[] fileByte = bos.toByteArray();
// 获取到一定的数据时尝试解码
    imageSource.updateData(fileByte, 0, fileByte.length / 2, false);
    ImageSource.DecodingOptions decodingOpts = new ImageSource.DecodingOptions();
    PixelMap pixelMap = imageSource.createPixelmap(decodingOpts);

// 更新数据再次解码,重复调用直到数据全部更新完成
    imageSource.updateData(fileByte, fileByte.length / 2, fileByte.length / 4, false);
    pixelMap = imageSource.createPixelmap(decodingOpts);

// 数据全部更新完成时需要传入isFinal为true
    imageSource.updateData(fileByte, fileByte.length * 3 / 4, fileByte.length / 4, true);
    pixelMap = imageSource.createPixelmap(decodingOpts);
} catch (IOException e) {
    e.printStackTrace();
}

3. 解码完成获取到PixelMap对象后,可以进行后续处理,比如渲染显示等。文章来源地址https://www.toymoban.com/news/detail-503125.html

到了这里,关于HarmonyOS学习路之开发篇—多媒体开发(图像开发 一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙HarmonyOS开发实战—多媒体开发(音频开发 一)

    HarmonyOS音频模块支持音频业务的开发,提供音频相关的功能,主要包括音频播放、音频采集、音量管理和短音播放等。 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。 采样率 采样率为每秒从连续信号中提取并

    2024年01月24日
    浏览(51)
  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月09日
    浏览(57)
  • 设计HTML5图像和多媒体

    在网页中的文本信息直观、明了,而多媒体信息更富内涵和视觉冲击力。恰当使用不同类型的多媒体可以展示个性,突出重点,吸引用户。在HTML5之前,需要借助插件为网页添加多媒体,如Adobe Flash Player、苹果的QuickTime等。HTML5引入原生的多媒体技术,设计多媒体更简便,用户

    2024年02月12日
    浏览(42)
  • 多媒体数据处理实验3:图像特征提取与检索

    1. 算法描述 功能:   使用BOF(Bag of Features)算法提取图像特征,在corel数据集(10*100)张图片上实现以图搜图,即输入数据集中某一张图,在剩下的999张图里搜索最邻近的10张图。 2.算法流程: 用 SIFT算法 提取图像的特征。每幅图像提取出几百至几千个特征点,将所有图像的特

    2024年02月07日
    浏览(68)
  • (八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法

    欢迎各位读者来到“最全Streamlit教程”专栏系列!如果您正在寻找一种简单而强大的方式来创建交互式数据应用程序,那么Streamlit无疑是您的最佳选择。作为该领域的热门框架,Streamlit让数据科学家、开发者和爱好者能够以前所未有的速度构建出引人入胜的数据可视化工具。

    2024年02月13日
    浏览(47)
  • 多媒体开发之cgo

         go语言作为近十年来优秀的现代开发语言的代表,由于继承了c语言的简洁和很多现代语言的表达方式,在广泛的应用场景中得到众多爱好者的喜爱,如何将go和c、c++进行联合开发,拓展整个开发生态,不用重复造轮子,掌握cgo可以让你得心应手的在c和go之间传递信息,

    2024年02月16日
    浏览(49)
  • [HTML]Web前端开发技术4(HTML5、CSS3、JavaScript )图像与多媒体文件hspace,vspace,scrollamount,bgcolor,marquee——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 图像与多媒体文件 网页文件常见的图像格式有: 图像 设置图像的替代文字 设置图像的宽度和高度

    2024年02月05日
    浏览(71)
  • Android多媒体功能开发(2)——FileProvider

    使用系统多媒体界面需要在我们的应用和其他应用之间通过Intent传递音频、图片、视频文件的信息。随着Android版本的升级,对应用数据安全性方面的限制越来越多。 Android 6以后不允许应用在外部存储随便创建目录,只能在Android规定的应用自己的文件目录下创建目录,该目录

    2024年02月14日
    浏览(48)
  • qt6 多媒体开发代码分析(二、录音)

    常见的音频编码格式包括MP3、AAC、OGG、WMA、FLAC等,它们之间具有以下区别: 编码方式不同:这些编码格式采用的编码算法不同,例如MP3和AAC使用有损压缩算法,而FLAC使用无损压缩算法。 压缩率和文件大小不同:由于采用的编码算法不同,不同格式的音频文件压缩率和文件大

    2024年02月07日
    浏览(39)
  • HTML-多媒体嵌入-MDN文档学习笔记

    查看更多学习笔记:GitHub:LoveEmiliaForever MDN中文官网 将图片放入网页 可以使用 img/ 来将图片嵌入网页,它是一个空元素,最少只需 src 属性即可工作 src 指向图片资源的地址,是 img/ 正常工作必不可少的属性 ❗️除非有必要,否则 永远不要 把 src 指向其它网站上的图片,这

    2024年02月20日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包