ArkUI-Image详解

news/2024/10/19 15:11:41

ArkUI-Image详解

文章摘要:
给Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果。以下是几个常用属性的使用示例。这时可以使用interpolation属性对图片进行插值,使图片显示得更清晰。Image组件引入本地图片路径,即可显示图片(根目录为ets文件夹)。通过renderMode属性设置图片的渲染模式为原色或黑白。通过objectFit属性使图片缩放到高度和宽度确定的框内。创建文件夹,将本地图片放入ets文件夹下的任意位置。当原图分辨率较低并且放大显示时,图片会模糊出现锯齿。
  • 本地资源

创建文件夹,将本地图片放入ets文件夹下的任意位置。

Image组件引入本地图片路径,即可显示图片(根目录为ets文件夹)。

Image('images/pic1.webp').width(100).height(100)

  • Resource资源

使用资源格式可以跨包/跨模块引入图片,

resources文件夹下的图片都可以通过$r资源接口读

取到并转换到Resource格式。

支持png、webp、jpg等格式

Image($r('app.media.pic1')).width('100').height('100')

  • 设置图片渲染模式

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

ImageRenderMode.Original: 渲染模式为原色

ImageRenderMode.Template: 渲染模式为黑白

Image($r('app.media.pic1'))// 设置图片的渲染模式为黑白.renderMode(ImageRenderMode.Template).width(100).height(100).border({ width: 1 })

  • 图片插值

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

这时可以使用interpolation属性对图片进行插值,使图片显示得更清晰。

 Column() {Row() {Image($r('app.media.pic1_low')).width('40%').interpolation(ImageInterpolation.None).borderWidth(1).overlay("Interpolation.None", { align: Alignment.Bottom, offset: { x: 0, y: 20 } }).margin(10)Image($r('app.media.pic1_low')).width('40%').interpolation(ImageInterpolation.Low).borderWidth(1).overlay("Interpolation.Low", { align: Alignment.Bottom, offset: { x: 0, y: 20 } }).margin(10)}.width('100%').justifyContent(FlexAlign.Center)Row() {Image($r('app.media.pic1_low')).width('40%').interpolation(ImageInterpolation.Medium).borderWidth(1).overlay("Interpolation.Medium", { align: Alignment.Bottom, offset: { x: 0, y: 20 } }).margin(10)Image($r('app.media.pic1_low')).width('40%').interpolation(ImageInterpolation.High).borderWidth(1).overlay("Interpolation.High", { align: Alignment.Bottom, offset: { x: 0, y: 20 } }).margin(10)}}

效果如下:

  • 设置图片缩放类型

给Image组件设置属性可以使图片显示更灵活,达到一些自定义的效果。以下是几个常用属性的使用示例。

设置图片缩放类型:
通过objectFit属性使图片缩放到高度和宽度确定的框内。

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

案例代码如下:

@Entry
@Component
struct ImageDemo {@State imageWidth: number = 0@State imageHeight: number = 0build() {Column({space: 30}) {Row({space: 15}) {Image($r('app.media.pic1')).width(200).height(100).border({ width: 1 })// 保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。.objectFit(ImageFit.Contain).overlay('Contain', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })Image($r('app.media.pic1')).width(200).height(100).border({ width: 1 }).objectFit(ImageFit.Cover)// 保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。.overlay('Cover', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })Image($r('app.media.pic1')).width(200).height(100).border({ width: 1 })// 自适应显示。.objectFit(ImageFit.Auto).overlay('Auto', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })}Row({space: 15}) {Image($r('app.media.pic1')).width(200).height(100).border({ width: 1 })// 不保持宽高比进行放大缩小,使得图片充满显示边界。.objectFit(ImageFit.Fill).overlay('Fill', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })Image($r('app.media.pic1')).width(200).height(100).border({ width: 1 })// 保持宽高比显示,图片缩小或者保持不变。.objectFit(ImageFit.ScaleDown).overlay('ScaleDown', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })Image($r('app.media.pic1')).width(200).height(100).border({ width: 1 })// 保持原有尺寸显示。.objectFit(ImageFit.None).overlay('None', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })}}.width('100%').height('100%').justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Center)}
}

显示效果:

  • 设置图片重复样式
.objectRepeat(ImageRepeat.XY): 在水平轴和竖直轴上同时重复绘制图片
.objectRepeat(ImageRepeat.X): 只在水平轴上重复绘制图片
.objectRepeat(ImageRepeat.Y): 只在竖直轴上重复绘制图片

案例代码如下:

@Entry
@Component
struct ImageDemo {build() {Column({space: 15}) {Row({ space: 15 }) {Image($r('app.media.pic1_low')).size({width: 120, height: 120}).border({width: 1,color: Color.Red, radius: 8})// 在水平轴和竖直轴上同时重复绘制图片.objectRepeat(ImageRepeat.XY).objectFit(ImageFit.ScaleDown).overlay('ImageRepeat.XY', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })Image($r('app.media.pic1_low')).size({width: 120, height: 120}).border({width: 1,color: Color.Red, radius: 8})// 只在竖直轴上重复绘制图片.objectRepeat(ImageRepeat.Y).objectFit(ImageFit.ScaleDown).overlay('ImageRepeat.Y', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })Image($r('app.media.pic1_low')).size({width: 120, height: 120}).border({width: 1,color: Color.Red, radius: 8})// 只在水平轴上重复绘制图片.objectRepeat(ImageRepeat.X).objectFit(ImageFit.ScaleDown).overlay('ImageRepeat.X', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })}}.width('100%').height('100%').justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Center)}
}

显示效果:

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

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

相关文章

强化学习算法笔记之【DDPG算法】

强化学习笔记第2篇,讲解DDPG算法。 感兴趣可以参考或者复刻。强化学习笔记之【DDPG算法】 目录强化学习笔记之【DDPG算法】前言:原论文伪代码DDPG 中的四个网络代码核心更新公式前言: 本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Crit…

python输出hello world

输出print("hello world")

2161: 【例9.3】小写字母转大写字母 【超出字符数据范围】

include <bits/stdc++.h> using namespace std; int main( ) { char a; cin >> a; cout << char(a-32); return 0; } // 反思1: cin >> a; 忘记写了 反思2: +是转为小写字母-是转为大写字母 【做错】

航飞参数计算

作者:太一吾鱼水 宣言:在此记录自己学习过程中的心得体会,同时积累经验,不断提高自己! 声明:博客写的比较乱,主要是自己看的。如果能对别人有帮助当然更好,不喜勿喷! 文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家…

第4课 SVN

1、svn的定义: svn是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式管理。 2.snv的作用: 在项目中对需求规格说明书,测试用例,代码,以及项目项目的文件进项管理和分享。 3、svn…

npm run的时候报错: this[kHandle] = new _Hash(algorithm, xofLen);

在前面加入以下配置信息 set NODE_OPTIONS=--openssl-legacy-provider && 后面跟原来的启动配置信息 凡哥,别他妈吹牛逼了

MiGPT让你的小爱音响更聪明hA

合集 - 经验分享(29)1.记一次由于操作失误致使数据库瘫痪的故障分析与解决方案2023-09-082.网络之谜:记一次失败排查的故事2023-11-153.你是否想知道如何应对高并发?Go语言为你提供了答案!2023-12-294.2023年终总结:拉帮结伙,拼搏探索新机遇2023-12-305.谁说后端不能画出美…

Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解

title: Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解 date: 2024/10/19 updated: 2024/10/19 author: cmdragon excerpt: app:templatesGenerated 是 Nuxt.js 的一个生命周期钩子,在模板编译到虚拟文件系统(Virtual File System, VFS)之后被调用。这个钩子允许…