HarmonyOS 一个普通应用,如何在代码里实现屏幕截图操作,返回image.PixelMap?

如题:HarmonyOS 一个普通应用,如何在代码里实现屏幕截图操作,返回image.PixelMap?

阅读 567
1 个回答

参考以下代码,可以实现截图:

import window from '@ohos.window'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
import { image } from '@kit.ImageKit'; 
import { photoAccessHelper } from '@kit.MediaLibraryKit'; 
import fs from '@ohos.file.fs'; 
import { promptAction } from '@kit.ArkUI'; 
@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
  build() { 
    RelativeContainer() { 
      Text(this.message) 
        .id('HelloWorld') 
        .fontSize(50) 
        .fontWeight(FontWeight.Bold) 
        .alignRules({ 
          center: { anchor: '__container__', align: VerticalAlign.Center }, 
          middle: { anchor: '__container__', align: HorizontalAlign.Center } 
        }) 
      SaveButton({ 
        icon: SaveIconStyle.FULL_FILLED, 
        text: SaveDescription.SAVE_IMAGE, 
        buttonType: ButtonType.Capsule 
      }) 
        .onClick(async (event, result) => { 
          // Get pixelMap 
          window.getLastWindow(getContext(this), (err: BusinessError, data) => { 
            const errCode: number = err.code; 
            if (errCode) { 
              return; 
            } 
            let windowClass = data; 
            windowClass.snapshot(async (err: BusinessError, pixelMap: image.PixelMap) => { 
              const errCode: number = err.code; 
              if (errCode) { 
                return; 
              } 
              console.info('Succeeded in snapshotting window. Pixel bytes number: ' + pixelMap.getPixelBytesNumber()); 
              let scaleX: number = 0.5; 
              let scaleY: number = 0.5; 
              // Save Pic 
              if (result === SaveButtonOnClickResult.SUCCESS) { 
                const helper = photoAccessHelper.getPhotoAccessHelper(getContext(this)); 
                try { 
                  const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png'); 
                  const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
                  const imagePackerApi: image.ImagePacker = image.createImagePacker(); 
                  const packOpts: image.PackingOption = { 
                    format: 'image/png', 
                    quality: 100, 
                  }; 
                  imagePackerApi.packToFile(pixelMap, file.fd, packOpts).then(() => { 
                    promptAction.showToast({ 
                      message: 'Succeeded save', 
                      duration: 1500 
                    }) 
                  }).catch((error: BusinessError) => { 
                    console.error(`Failed to packToFile. Error code is ${error.code}, message is ${error.message}`); 
                  }); 
                } catch (error) { 
                  const err: BusinessError = error as BusinessError; 
                  console.error(`Failed to save photo. Error code is ${err.code}, message is ${err.message}`); 
                } 
              } else { 
                promptAction.showToast({ 
                  message: 'No permission.', 
                  duration: 1500 
                }) 
              } 
            }); 
          }); 
        }) 
    } 
    .height('100%') 
    .width('100%') 
  } 
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进