在图片保存成功之后要使用imagePackerApi.release()释放,demo如下:import { resourceManager } from '@kit.LocalizationKit'; import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { image } from '@kit.ImageKit'; import { promptAction } from '@kit.ArkUI'; import { fileIo } from '@kit.CoreFileKit'; @Entry @Component export struct SavePixelMapToAlbum { @State saveButtonOptions: SaveButtonOptions = { icon: SaveIconStyle.FULL_FILLED, text: SaveDescription.SAVE, buttonType: ButtonType.Capsule }; @State pixel: image.PixelMap | undefined = undefined; @State albumPath: string = ''; @State photoSize: number = 0; private context: Context = getContext(this); async aboutToAppear() { const resourceMgr: resourceManager.ResourceManager = this.context.resourceManager; const fileData: Uint8Array = await resourceMgr.getMediaContent($r('app.media.app_icon').id); let buffer = new Uint8Array(fileData).buffer as object as ArrayBuffer; let imageResource = image.createImageSource(buffer); let opts: image.DecodingOptions = { editable: true }; this.pixel = await imageResource.createPixelMap(opts); } async saveSnapshot() { try { const context = getContext(this); let helper = photoAccessHelper.getPhotoAccessHelper(context); let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png') let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE) // 写入文件 const imagePackerApi: image.ImagePacker = image.createImagePacker(); let packOpts: image.PackingOption = { format: 'image/png', quality: 100 }; imagePackerApi.packToFile(this.pixel, file.fd, packOpts).finally(() => { fileIo.close(file.fd).finally(() => { promptAction.showToast({ message: '图片保存成功!' }) imagePackerApi.release() }) }) } catch (error) { } } build() { Column() { Image(this.pixel) .objectFit(ImageFit.None) .height('30%') SaveButton(this.saveButtonOptions) .onClick(async (event, result: SaveButtonOnClickResult) => { if (result === SaveButtonOnClickResult.SUCCESS) { this.saveSnapshot() } }) } .justifyContent(FlexAlign.Start) .height('100%') .width('100%') } }
在图片保存成功之后要使用imagePackerApi.release()释放,demo如下: