当前位置: 首页 > 科技观察

鸿蒙HarmonyOS获取系统照片并解码渲染(附完整demo)

时间:2023-03-21 19:42:28 科技观察

更多内容请访问:鸿蒙Harmonyos技术社区https://harmonyos.51cto.com/#zz声明看看,这是一个小demo夏草君老师在周六直播预告素材的加持下写的。大家记得看夏老师的直播,会在入口首页展示的。话不多说,先运行demo的效果,下面两张图:点击按钮显示图片后,会显示一张图片(图片是什么,请满意,我是用远程模拟器拍的)完整的demo在附件里下载PS说一下操作步骤,把demo烧到手机里,记住这个时候手机是没有照片的,先打开相机拍照,然后就可以了像下图截图,然后打开demo,点击显示图片按钮,显示你拍摄的图片)老规矩先说一下大概的思路:1.要看本机的图片,必须先有权限,所以先想办法获取权限2.获取权限后,可以使用类似数据库的搜索方式,搜索图片的ID。3、获取到ID后,转换为uri4。获取uri后,使用uri生成Pixmap5。得到Pixmap后,用Image渲染它的Pixmap1。获取读取照片的权限,在config中添加如下配置文件:"reqPermissions":[{"name":"ohos.permission.READ_USER_STORAGE"}然后在java代码中获取该权限String[]permission={"ohos.permission.READ_USER_STORAGE"};requestPermissionsFromUser(permission,0);2.获取权限后,可以使用类似数据库的搜索方式,搜索图片的ID。首先获取一个DataAbilityHelperDataAbilityHelperhelper=DataAbilityHelper.creator(getContext());然后调用query查询方法获取图片ID,其实只有一个媒体.ID));3.得到ID后,转换为uriUriuri=Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI,""+mediaId);4.获取uri后,使用uri生成一个Pixmap4.1首先使用openFileAPI,用获取的uri获取FileDescriptor对象4.2使用上一步的对象作为参数,新建一个ImageSource对象和DecodingOptions该对象下的对象4.3然后调用上一步构建的ImageSource对象的createThumbnailPixelmap方法生成PixmapFileDescriptorfiledesc=helper.openFile(uri,"r");ImageSource.DecodingOptionsdecodingOpts=newImageSource.DecodingOption();decodingOpts.desiredSize=newSize(300,300);ImageSourceimageSource=ImageSource.create(filedesc,null);PixelMappixelMap=imageSource.createThumbnailPixelmap(decodingOpts,true);5、拿到Pixmap后,使用Image渲染Pixmap不管你用什么方法得到一个Image对象,然后调用它的setPixelMap,把上一步得到的Pixmap作为参数传过去就可以了。至于其他的,都是对Image的其他属性的设置。Imageimg=(Image)findComponentById(ResourceTable.Id_image1);img.setId(mediaId);img.setHeight(300);img.setWidth(300);img.setMarginTop(20);img.setMarginLeft(20);img.setPixelMap(pixelMap);img.setScaleMode(Image.ScaleMode.ZOOM_CENTER);由于时间仓促,这个demo比较简单,只能显示一张图片。下周我应该会在这个demo的基础上继续完善。感兴趣的朋友可以关注一下。完整demo源码见附件?版权归作者和HarmonyOS技术社区共同所有。如需转载请注明出处,否则将追究法律责任。更多信息请访问:与华为共建的HarmonyOS技术社区https://harmonyos.51cto.com/#zz