前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【坚果派】HarmonyOS 以及OpenHarmony中如何选择图片,并显示在桌面上

【坚果派】HarmonyOS 以及OpenHarmony中如何选择图片,并显示在桌面上

作者头像
徐建国
发布2023-08-10 09:29:10
2970
发布2023-08-10 09:29:10
举报
文章被收录于专栏:个人路线个人路线

【坚果派】HarmonyOS 以及OpenHarmony中如何选择图片,并显示在桌面上

1.导入选择器模块。

代码语言:javascript
复制
import picker from '@ohos.file.picker';

2.创建图库选择选项实例。

代码语言:javascript
复制
const photoSelectOptions = new picker.PhotoSelectOptions();

3.选择媒体文件类型和选择媒体文件的最大数目。

以下示例以图片选择为例,媒体文件类型请参见PhotoViewMIMETypes。

代码语言:javascript
复制
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目

4.创建图库选择器实例,调用select()接口拉起FilePicker界面进行文件选择。

文件选择成功后,返回PhotoSelectResult结果集,可以根据结果集中URI进行文件读取等操作。

代码语言:javascript
复制
let uri = null;
const photoPicker = new picker.PhotoViewPicker();
photoPicker.select(photoSelectOptions).then((photoSelectResult) => {
  uri = photoSelectResult.photoUris[0];
}).catch((err) => {
  console.error(`Invoke photoPicker.select failed, code is ${err.code}, message is ${err.message}`);
})

5.待界面从FilePicker返回后,在其他函数中使用fs.openSync接口,通过uri打开这个文件得到fd。

代码语言:javascript
复制
let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
console.info('file fd: ' + file.fd);

6.通过fd使用fs.writeSync接口对这个文件进行编辑修改,编辑修改完成后关闭fd。

代码语言:javascript
复制
et writeLen = fs.writeSync(file.fd, 'hello, world');
console.info('write data to file succeed and size is:' + writeLen);
fs.closeSync(file);

完整代码

代码语言:javascript
复制
import picker from '@ohos.file.picker';

@Entry
@Component
struct SelectPhotoPage {
  @State imgDatas: string[] = [];
  scroller: Scroller = new Scroller()
  // 获取照片url集
  async getAllImg() {
    //
    let photoPicker = new picker.PhotoViewPicker();
    let result = new Array<string>();
    try {
      let PhotoSelectOptions = new picker.PhotoSelectOptions();
      PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
      PhotoSelectOptions.maxSelectNumber = 5;
      let photoPicker = new picker.PhotoViewPicker();
      photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult) => {
        this.imgDatas = PhotoSelectResult.photoUris;
        console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + JSON.stringify(PhotoSelectResult));
      }).catch((err) => {
        console.error(`PhotoViewPicker.select failed with. Code: ${err.code}, message: ${err.message}`);
      });
    } catch (err) {
      console.error(`PhotoViewPicker failed with. Code: ${err.code}, message: ${err.message}`);
    }
  }

 
  // 使用imgDatas的url加载图片。
  build() {
    Column() {
      Text("选择图片").fontSize(36).fontColor(Color.Orange).onClick(() => {
        //获取图库的所有图片url,存在imgDatas中
        this.getAllImg()
      })
      if (this.imgDatas.length>  0) {
        Button('next page').onClick(() => { // 点击后滑到下一页
          this.scroller.scrollPage({ next: true })
        })
        Button('scroll 150')
          .onClick(() => { // 点击后下滑指定距离150.0vp
            this.scroller.scrollBy(0, 150)
          })

        Button('scroll 100')
          .onClick(() => { // 点击后滑动到指定位置,即下滑100.0vp的距离
            this.scroller.scrollTo({ xOffset: 0, yOffset: this.scroller.currentOffset().yOffset + 100 })
          })

        Button('back top')
          .onClick(() => { // 点击后回到顶部
            this.scroller.scrollEdge(Edge.Top)
          })
      }

      Scroll(this.scroller) {
        Column() {
          ForEach(this.imgDatas, item => {

            Image(item)
              .width(200).borderRadius(20).margin(5)

          }, item => JSON.stringify(item))
        }.width('100%')
      }
      .scrollable(ScrollDirection.Vertical) // 滚动方向纵向
      .scrollBar(BarState.On) // 滚动条常驻显示
      .scrollBarColor(Color.Gray) // 滚动条颜色
      .scrollBarWidth(10) // 滚动条宽度
      .edgeEffect(EdgeEffect.None)
      .height("80%")
      .margin({
        bottom: 20
      })

    }.width('100%').height('100%')
  }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大前端之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档