在應用開發(fā)過程中猜惋,經常碰到如果把圖庫中的文件顯示出來,如朋友圈中的圖片選擇功能培愁。本示例主要展示了OpenHarmony 文件管理中著摔,如何獲取系統(tǒng)目錄下的圖片文件,并且顯示在Image中定续。
預覽效果:
1谍咆、獲取系統(tǒng)文件數(shù)據(jù)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對象恩掷,進行數(shù)據(jù)讀取,并且轉換為PixlMap對象:
async getPixelMapByFileAsset(fileAsset:mediaLibrary.FileAsset):Promise{
? if(fileAsset==undefined){
? ? Logger.error('fileAsset undefined')
? ? // 異常情況下統(tǒng)一返回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)