OpenHarmony 如何获取图片文件并且在Image组件显示

在应用开发过程中,经常碰到如果把图库中的文件显示出来,如朋友圈中的图片选择功能。本示例主要展示了OpenHarmony 文件管理中,如何获取系统目录下的图片文件,并且显示在Image中。


预览效果:

链接:code/BasicFeature/FileManagement/FileManager · OpenHarmony/applications_app_samples - 码云 - 开源中国 (gitee.com)

1、获取系统文件数据FileAsset

获取文件对象的方法如下,入参为abilityContext和文件类型,示例代码如下:

async getFileAssets(context, fileType:mediaLibrary.MediaType):Promise<mediaLibrary.FetchFileResult>{

  Logger.debug('begin getFileAssets, fileType:'+fileType)

  let fileKeyObj=mediaLibrary.FileKey

  let imagesFetchOption={

    selections:fileKeyObj.MEDIA_TYPE+'= ?',

    selectionArgs:[fileType.toString()],

  }

  let fetchFileResult:mediaLibrary.FetchFileResult=undefined

  try{

    fetchFileResult=await this.getMediaLibrary(context).getFileAssets(imagesFetchOption)

    Logger.debug('fetchFileResult count:'+fetchFileResult.getCount())

  } catch(error) {

    Logger.error('fetchFileResult Error: '+JSON.stringify(error))

  }

  return fetchFileResult

}

2、通过获取的FileAsset对象,进行数据读取,并且转换为PixlMap对象:

async getPixelMapByFileAsset(fileAsset:mediaLibrary.FileAsset):Promise{

  if(fileAsset==undefined){

    Logger.error('fileAsset undefined')

    // 异常情况下统一返回undefined,不建议使用null

    return undefined

  }

  Logger.debug('begin getPixelMapByFileAsset:'+fileAsset.displayName)

  let fd:number=undefined

  let pixelMap=undefined

  try{

    fd=await fileAsset.open('rw')

    Logger.debug('getPixelMapByFileAsset fd: '+fd)

    let imageSource=image.createImageSource(fd)

    Logger.debug('imageSource: '+JSON.stringify(imageSource))

    let decodingOptions={

      sampleSize:1,

      editable:true,

      desiredSize:{width:3000,height:4000},

      rotate:0,

      desiredPixelFormat:3,

      desiredRegion:{size:{height:6000,width:8000},x:0,y:0},

      index:0

    }

    pixelMap= await imageSource.createPixelMap(decodingOptions)

    Logger.debug('pixel size: '+pixelMap.getPixelBytesNumber())

    fileAsset.close(fd)

  }catch(err){

    Logger.debug('err: '+JSON.stringify(err))

  }

  return pixelMap

}

3、获取到pixelMap,可以直接传到Image组件中,显示出来


大家可以参考具体的示例代码,源码链接:文件管理

另外推荐OpenHarmony官方的sample仓,里面有大量示例代码,可以端到端指导各个场景示例代码,链接:OpenHarmony/applications_app_samples - 码云 - 开源中国 (gitee.com)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容