鸿蒙开发-UI-图形-图片

鸿蒙开发-UI-组件

鸿蒙开发-UI-组件2

鸿蒙开发-UI-组件3

鸿蒙开发-UI-气泡/菜单

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件导航-Navigation

鸿蒙开发-UI-组件导航-Tabs

文章目录

一、基本概念

二、图片资源加载

1. 存档图类型数据源

2.多媒体像素图

三、显示矢量图

四、图片显示相关属性

1.设置图片缩放类型

2.图片插值

3.设置图片重复样式

4.设置图片渲染模式

5.设置图片解码尺寸

6.为图片添加滤镜效果

7.同步加载图片

五、图片显示相关事件

总结


前言

上文详细学习了组件导航组件Tabs的使用场景,以及不同的导航布局方式,同时也学习了导航栏的使用模式(固定,滚动)以及自定义导航栏的使用。本文学习鸿蒙开发UI图形显示相关知识

一、基本概念

 图片显示需要使用Image组件,支持多种图片格式,包括png、jpg、bmp、svg和gif

Image通过调用如下接口来创建

Image(src: string | Resource | media.PixelMap)

二、图片资源加载

Image支持加载存档图、多媒体像素图两种类型

1. 存档图类型数据源

2.多媒体像素图

三、显示矢量图

Image组件可显示矢量图(svg格式的图片)

svg格式的图片可以使用fillColor属性改变图片的绘制颜色

Image($r('app.media.cloud')).width(50)
.fillColor(Color.Blue) 
原始图片颜色设置绘制颜色后的svg图片

四、图片显示相关属性

Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果

1.设置图片缩放类型

Image组件objectFit取值显示说明
objectFit(ImageFit.Contain)保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内
objectFit(ImageFit.Cover)保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界
objectFit(ImageFit.Auto)自适应显示
objectFit(ImageFit.Fill)不保持宽高比进行放大缩小,使得图片充满显示边界
objectFit(ImageFit.ScaleDown)保持宽高比显示,图片缩小或者保持不变
objectFit(ImageFit.None)保持原有尺寸显示

2.图片插值

当原图分辨率较低并且放大显示时,图片会模糊出现锯齿。

使用interpolation属性对图片进行插值,使图片显示得更清晰

Image组件interpolation取值显示效果
interpolation(ImageInterpolation.None)
interpolation(ImageInterpolation.Low)
interpolation(ImageInterpolation.Medium)
interpolation(ImageInterpolation.High)

3.设置图片重复样式

通过objectRepeat属性设置图片的重复样式方式

Image组件objectRepeat取值显示说明显示效果
objectRepeat(ImageRepeat.XY)在水平轴和竖直轴上同时重复绘制图片
objectRepeat(ImageRepeat.Y)只在竖直轴上重复绘制图片
objectRepeat(ImageRepeat.X)只在水平轴上重复绘制图片

4.设置图片渲染模式

通过renderMode属性设置图片的渲染模式为原色或黑白

Image组件renderMode取值显示说明显示效果
renderMode(ImageRenderMode.Original)设置图片的渲染模式为原色
renderMode(ImageRenderMode.Template)设置图片的渲染模式为黑白

5.设置图片解码尺寸

通过sourceSize属性设置图片解码尺寸,降低图片的分辨率

//将原图片解码为150*150
Image($r('app.media.example')).sourceSize({width: 150,height: 150})

6.为图片添加滤镜效果

通过colorFilter修改图片的像素颜色,为图片添加滤镜

代码示例

@Entry
@Component
struct Index {build() {Column() {Row() {Image($r('app.media.example')).width('40%').margin(10)Image($r('app.media.example')).width('40%').colorFilter([1, 1, 0, 0, 0,0, 1, 0, 0, 0,0, 0, 1, 0, 0,0, 0, 0, 1, 0]).margin(10)}.width('100%').justifyContent(FlexAlign.Center)}}
}

UI渲染

7.同步加载图片

一般情况下,图片加载流程会异步进行,以避免阻塞主线程,影响UI交互。但是特定情况下,图片刷新时会出现闪烁,这时可以使用syncLoad属性,使图片同步加载,从而避免出现闪烁。

注:如果图片加载较长时间导致页面无法响应场景,不建议使用同步加载

Image($r('app.media.icon')).syncLoad(true)

五、图片显示相关事件

Image组件上绑定onComplete事件,图片加载成功后可以获取图片的必要信息。如果图片加载失败,也可以通过绑定onError回调来获得结果

代码示例

@Entry
@Component
struct MyComponent {@State widthValue: number = 0@State heightValue: number = 0@State componentWidth: number = 0@State componentHeight: number = 0build() {Column() {Row() {Image($r('app.media.ic_img_2')).width(200).height(150).margin(15)
//step1:定义图片加载完成后,获取图片的相关属性.onComplete(msg => {if(msg){this.widthValue = msg.widththis.heightValue = msg.heightthis.componentWidth = msg.componentWidththis.componentHeight = msg.componentHeight}})
//step2:定义图片获取失败,打印结果.onError(() => {console.info('load image fail')})
//step3:通过状态变量获取图片属性数据,图片加载完成状态变量数据变更,Image组件重新渲染.overlay('width: ' + String(this.widthValue) + ', height: ' + String(this.heightValue) + 'componentWidth: ' + String(this.componentWidth) + 'componentHeight: ' + String(this.componentHeight), {align: Alignment.Bottom,offset: { x: 0, y: 60 }})}}}
}

UI渲染


总结

本文详细学习了鸿蒙开发UI图片显示相关知识,学习了图片资源加载的两种类型,以及矢量图的显示,同时学习了图片渲染组件的相关属性和相关事件的使用方式和效果。下文将学习鸿蒙开发UI图形绘制。

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

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

相关文章

LLM大语言模型(六):RAG模式下基于PostgreSQL pgvector插件实现vector向量相似性检索

目录 HightLightMac上安装PostgreSQLDBever图形界面管理端创建DB 使用向量检索vector相似度计算近似近邻索引HNSW近似近邻索引示例 HightLight 使用PostgreSQL来存储和检索vector,在数据规模非庞大的情况下,简单高效。 可以和在线业务共用一套DB&#…

在 Ubuntu 22.04 上安装 Django Web 框架的方法

简介 Django 是一个功能齐全的 Python Web 框架,用于开发动态网站和应用程序。使用 Django,您可以快速创建 Python Web 应用程序,并依赖框架来完成大部分繁重的工作。 在本指南中,您将在 Ubuntu 22.04 服务器上启动 Django。安装…

【动态规划】【C++算法】2188. 完成比赛的最少时间

作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCode2188. 完成比赛的最少时间 给你一个下标从 0 开始的二维整数数组 tires ,其中 tires[i] [fi, ri] 表示第 i 种轮胎如果连续使用,第 x 圈需要耗时 fi…

Xshell

更改背景颜色 多个会话同时执行命令 查看 -> 撰写 -> 撰写窗格

【YOLO系列详解——超详细】

YOLO系列详解 1. 介绍2. YOLO原理3. YOLO版本4. 在开发实践中使用YOLO 1. 介绍 YOLO(You Only Look Once)是一种使用深度学习实现的端到端的目标检测系统,YOLO系列模型以其检测速度快、实时性高而闻名,并且能在图像中同时预测多个…

【Spring】GoF 之工厂模式

一、GoF 23 设计模式简介 设计模式:一种可以被重复利用的解决方案 GoF(Gang of Four),中文名——四人组 《Design Patterns: Elements of Reusable Object-Oriented Software》(即《设计模式》一书)&…

MySQL 的Sql脚本是如何被编译的

MySQL是一个关系型数据库管理系统(RDBMS),它使用SQL(Structured Query Language,结构化查询语言)作为其主要的查询语言。在MySQL中运行一个SQL脚本时,MySQL实际上并不会像传统的编程语言那样将S…

企业级人脸属性检测解决方案

在当今数字化、智能化的时代背景下,人脸识别技术已经成为众多行业不可或缺的一部分。美摄科技,作为人脸识别技术的领先者,为企业提供了一整套先进且高效的人脸属性检测解决方案。 美摄科技的人脸属性检测解决方案,基于深度学习算…

使用深度学习对网络摄像头图像进行分类

目录 加载相机和预训练网络 对相机快照进行分类 连续对相机图像进行分类 显示排名靠前的预测值 连续分类图像并显示排名靠前的预测值 另请参阅 此示例说明如何使用预训练的深度卷积神经网络 GoogLeNet 实时对来自网络摄像头的图像进行分类。 使用 MATLAB、普通的…

Vue-Vue3 集成编辑器功能

1、安装依赖 编辑器插件需要安装 wangeditor/editor 和 wangeditor/editor-for-vue 两个插件 npm install wangeditor/editor --savevue3运行如下命令安装 npm install wangeditor/editor-for-vuenext --savevue2运行如下命令安装 npm install wangeditor/editor-for-vue -…

Java强训day15(选择题编程题)

选择题 自连接使用一张表编程题 题目1 import java.util.Scanner;public class Main { public static int res(int n) {StringBuffer s new StringBuffer();while(n!0) {s.append(n%2);n/2;}int sum 0;String ss s.reverse().toString();for(int i0;i<ss.length()…

C语言的循环结构

目录 前言 1.三种循环语句 1.while循环 2.for循环 2.1缺少表达式的情况 3.do while循环 2.break语句和continue语句 2.1在while循环中 2.2在for循环中 2.3在do while 循环中 3.循环的嵌套 4.go to语句 前言 C语⾔是结构化的程序设计语⾔&#xff0c;这⾥的结构指的是…

LeetCode 207:课程表(图论,利用拓扑排序判断是否有环)

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 …

nginx + DNS域名解析

配置链接: Nginx 安装配置 | 菜鸟教程 安装完nginx后&#xff0c;访问&#xff1a; cd /usr/local/nginx/sbin/ 然后使用./nginx可使用nginx。 访问:http://服务器的ip地址后出现 因为访问IP地址很繁琐&#xff0c;需要记忆ip的数字地址&#xff0c;因此需要给它一个通俗的…

Rust入门2——随机数

文章目录 一、生成随机数二、比较两个数相等 简单列出两个Rust的小例子 一、生成随机数 在Cargo.toml的dependencies中引入rand&#xff0c;指定rand的版本 [dependencies] rand "^0.3.14"之后在主函数中调用rand函数&#xff0c;生成随机数 use rand::Rng; f…

MyBatis 实现动态 SQL

MyBatis 中的动态 SQL 就是SQL语句可以根据不同的情况情况来拼接不同的sql。 本文会介绍 xml 和 注解 两种方式的动态SQL实现方式。 XML的实现方式 先创建一个数据表&#xff0c;SQL代码如下&#xff1a; DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo (id int(1…

Mac上几款好用的MacBook视频播放器

使用Mac电脑时&#xff0c;视频播放器可以说是我们使用频率最高的软件之一了&#xff0c;不管是工作时看视频资料还是在家里看下载好的电影&#xff0c;都需要用到视频播放器&#xff0c;本文中我们就来推荐几款好用的Macbook视频播放器&#xff0c;总有一款适合你&#xff01;…

centos ssh 默认端口 修改

centos7更改SSH端口-腾讯云开发者社区-腾讯云 (tencent.com) linux centos修改ssh端口号_semanage port -a -t ssh_port_t -p tcp-CSDN博客

数据结构——B/顺序表和链表

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.线性表 线性表&#xff08;linear list&…

QXlsx Qt操作excel(1)

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…