首页 > 其他分享 >ArkUI-Image详解

ArkUI-Image详解

时间:2024-10-22 20:48:59浏览次数:3  
标签:ImageFit Image pic1 width 详解 ArkUI app 图片

ArkUI-Image详解

  • 本地资源

创建文件夹,将本地图片放入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 = 0
  build() {
  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)
  }
}

显示效果:
请添加图片描述

标签:ImageFit,Image,pic1,width,详解,ArkUI,app,图片
From: https://blog.csdn.net/qq_25768349/article/details/143078051

相关文章

  • COP3502 P2: RLE with Images Python
    COP3502P2:RLEwithImagesPythonOverviewInthisprojectstudentswilldeveloproutinestoencodeanddecodedataforimagesusingrun-lengthencodingRLE).Studentswillimplementencodinganddecodingofrawdata,conversionbetweendataandstring......
  • 员工离职监控系统是什么?30秒截员工电脑屏幕!离职倾向、摸鱼通通被领导监测【科普详解】
    近年来,随着科技的发展,一种名为“员工离职监控系统”的软件在职场中悄然兴起。这类系统不仅能够实时监测员工的离职倾向,甚至还能通过截图等方式监控员工的电脑屏幕,确保员工在工作时间内保持高效的工作状态。然而,这样的监控方式也引发了关于职场隐私与效率的双重考量。离职......
  • 《只狼:影逝二度》二十四项风灵月影修改器使用详解,只狼影逝二度3DM修改器完整使用指南
    当你沉浸在《只狼:影逝二度》那充满挑战与刺激的游戏世界中,风灵月影修改器的出现或许能为你的游戏体验带来全新的变化。这款拥有二十四项功能的修改器究竟该如何使用呢?下面就为你详细展开其使用方法的介绍。只狼影逝二度3DM修改器-只狼二十四项风灵月影修改器https://yz3l.com......
  • HarmonyOS ArkUI性能优化实践:长列表加载性能优化
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • Python 学生管理系统实现与详解
            在当今数字化的时代,学生管理系统对于学校和教育机构来说至关重要。它可以帮助管理人员高效地处理学生信息,提高工作效率。本文将详细介绍一个使用Python实现的学生管理系统,并对其代码进行深入分析。一、项目背景与需求        学生管理系统是为了......
  • Explain详解与索引优化最佳实践
    Mysql安装文档参考:http://note.youdao.com/noteshare?id=12bab3ad6bde2dc0db4158df1b23b7cd&sub=69BD07746CCF4F7DA94CCFB1C4E399E8Explain工具介绍使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在select语句之前增加explain关键字......
  • RAID5数据恢复—raid5阵列如何重组?raid5阵列重组方法详解
    RAID5数据恢复环境:一台存储上有一组由12块SCSI硬盘(11块数据盘+1块热备盘)组建的RAID5磁盘阵列,FreeBSD操作系统+zfs文件系统。RAID5故障:其中一块盘出现故障,需要重组该raid5磁盘阵列。RAID5数据恢复过程:1、将存储关机,将存储中所有磁盘标记后从槽位上取出。以只读方式将所有磁盘进......
  • Webpack5-Image
    处理图片资源过去在Webpack4时,我们处理图片资源通过file-loader和url-loader进行处理现在Webpack5已经将两个Loader功能内置到Webpack里了,我们只需要简单配置即可处理图片资源1.配置constpath=require("path");module.exports={entry:"./src/main.js"......
  • Taro 鸿蒙技术内幕系列(一):如何将 React 代码跑在 ArkUI 上
    作者:京东零售朱鸣辉   基于Taro打造的京东鸿蒙APP已跟随鸿蒙Next系统公测,本系列文章将深入解析Taro如何实现使用React开发高性能鸿蒙应用的技术内幕背景随着鸿蒙操作系统的快速发展,开发者们期待将现有跨平台应用迁移到鸿蒙平台。Taro作为一个流行的跨平台开......
  • Nuxt.js 应用中的 build:manifest 事件钩子详解
    title:Nuxt.js应用中的build:manifest事件钩子详解date:2024/10/22updated:2024/10/22author:cmdragonexcerpt:build:manifest是Nuxt.js中的一个生命周期钩子,它在Vite和Webpack构建清单期间被调用。利用这个钩子,开发者可以自定义Nitro渲染在最终HTM......