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

ArkUI-Image详解

时间:2024-10-19 14:59:19浏览次数:1  
标签:ImageFit Image pic1 width 详解 ArkUI app 图片

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 = 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://www.cnblogs.com/hmduorou/p/18475910

相关文章

  • Python基础之元组使用详解
    一、元组的定义    元组(tuple)是Python中的一种不可变序列类型,它可以包含任意数量的元素,这些元素可以是不同的数据类型。元组使用小括号()来表示,元素之间用逗号 , 分隔。示例:my_tuple=(1,'hello',3.14)二、元组的特点1. 不可变性:一旦创建,元组的内容不能被......
  • k8s 部署 nexus3 详解
    创建命名空间nexus3-namespace.yamlapiVersion:v1kind:Namespacemetadata:name:nexus-ns创建pv&pvcnexus3-pv-pvc.yamlapiVersion:v1kind:PersistentVolumemetadata:name:nfs-pvnamespace:nexus-nsspec:capacity:storage:3GiaccessModes:......
  • k8s 快速部署 sonarqube 详解
    sonarqubehttps://blog.csdn.net/li81562/article/details/139255900https://www.jindouyun.cn/document/industry/details/184076apiVersion:v1kind:Namespacemetadata:name:sonar-nsapiVersion:v1kind:PersistentVolumemetadata:name:nfs-pvnamespa......
  • Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解
    title:Nuxt.js应用中的app:templatesGenerated事件钩子详解date:2024/10/19updated:2024/10/19author:cmdragonexcerpt:app:templatesGenerated是Nuxt.js的一个生命周期钩子,在模板编译到虚拟文件系统(VirtualFileSystem,VFS)之后被调用。这个钩子允许开发者在生......
  • Image Manipulation
    Homework07Due: 6:00pm,Tuesday,October23,2024 DueDate:SubmityoursolutionstoGradescopeby6:00pm,Tuesday,October23. PLEASEbesuretousepropernamingconventionsforthefiles,classes,andfunctions. WewillNOTchangeanythingtor......
  • ThreadLocal源码详解
    目录Thread、ThreadLocalMap、ThreadLocal关系ThreadLocal中的get、Set方法ThreadLocal内存泄露问题Thread、ThreadLocalMap、ThreadLocal关系从源码可以看出:Thread类中有成员变量ThreadLocalMap,ThreadLocalMap类中有成员变量Entry[]数组,每个Entry对象的key是Thread......
  • Java Spring详解 -- 看完超越99%的同行
    Spring的核心功能IOC(控制反转,依赖注入),AOP(面向切面的编程)IOC:我们在使用过程中不用关注于对象是怎么创建的,只用应用过去,sping自动帮我们完成注入,对象的创建,spring默认创建对象是单例,这样减少了频繁创建对象,让对象重复利用,所有的对象都是放在BeanFactory工厂的AOP:面向切面的编程,......
  • 【数据结构】分治算法经典: 快速排序详解
    快速排序(Quicksort)是一种高效的排序算法,最早由TonyHoare在1960年提出。它采用了分治(DivideandConquer)策略,平均时间复杂度为O(nlog......
  • sql注入盲注详解以及绕过waf方法
    盲注mysql函数普及exists():用于判度条件是否满足,满足返回True,否则返回Falseif(条件,为真返回的值,为假返回的值):根据条件真假返回指定的值length(string):计算出长度string可以是任何字符串字面量或者字段名。substr(string,子字符串开始的位置,要提取的子字符串长......
  • transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(
    上周收到一位网友的私信,希望老牛同学写一篇有关使用transformers框架推理大模型的技术细节的文章。老牛同学刚开始以为这类的文章网上应该会有很多,于是想着百度几篇质量稍高一点的回复这位网友。结果,老牛同学搜索后发现,类似文章确实不少,但是总觉得不太满意,要么细节深度不够,要么......