HarmonyOS 鸿蒙Next如何自定义截图

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何自定义截图 如果要全屏截图,使用componentSnapshot要传什么id过去?

如果要自定义截一部分矩形呢

2 回复
  1. 可以使用窗口截图:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5#snapshot9
// EntryAbility.ets

onWindowStageCreate(windowStage: window.WindowStage): void {
  ...
  AppStorage.setOrCreate('windowStage', windowStage);
  ...
}

===================================
// xxx.ets

import { BusinessError } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';
import { window } from '@kit.ArkUI';

@Entry
@Component
struct xxx{
  @State snapshotPixelMap: image.PixelMap | null = null;

  build() {
    Column() {
      Button("snapshot").onClick(() => {
        try {
          this.snapshot()
        } catch (err) {
          console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
        }
      })
      Image(this.snapshotPixelMap).width(200).height(200).objectFit(ImageFit.ScaleDown).borderWidth(1)
    }
  }

  snapshot() {
    let windowStage = AppStorage.get("windowStage") as window.WindowStage
    try {
      let windowClass = windowStage.getMainWindowSync();
      windowClass.snapshot((err: BusinessError, pixelMap: image.PixelMap) => {
        const errCode: number = err.code;
        if (errCode) {
          console.error('Failed to snapshot window. Cause:' + JSON.stringify(err));
          return;
        }
        console.info('Succeeded in snapshotting window. Pixel bytes number: ' + pixelMap.getPixelBytesNumber());
        this.snapshotPixelMap = pixelMap
        // pixelMap.release(); // PixelMap使用完后及时释放内存
      });
    } catch (exception) {
      console.error(`Failed to obtain the main window. Cause code: ${exception.code}, message: ${exception.message}`);
    }
  }
}
  1. 可以组件截图,用这个componentSnapshot的方法。您这边用窗口截图获取到的 pixelMap,再对pixelMap进行处理,使用crop方法进行裁剪。图像crop方法api地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#ZH-CN_TOPIC_0000001884758670__crop9
import { BusinessError } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';
import { window } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State snapshotPixelMap: image.PixelMap | null = null;

  build() {
    Column({ space: 10 }) {
      Text("111").width("100%").backgroundColor(Color.Pink)
      Text("111").width("100%").backgroundColor(Color.Pink)
      Text("111").width("100%").backgroundColor(Color.Pink)
      Button("snapshot").onClick(() => {
        try {
          this.snapshot()
        } catch (err) {
          console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
        }
      })
      Image(this.snapshotPixelMap).width(200).height(200).objectFit(ImageFit.ScaleDown).borderWidth(1).backgroundColor(Color.Green)
    }.width("100%").height("100%")
    .backgroundColor(Color.Yellow)
  }

  snapshot() {
    let windowStage = AppStorage.get("windowStage") as window.WindowStage
    try {
      let windowClass = windowStage.getMainWindowSync();
      windowClass.snapshot((err: BusinessError, pixelMap: image.PixelMap) => {
        const errCode: number = err.code;
        if (errCode) {
          console.error('Failed to snapshot window. Cause:' + JSON.stringify(err));
          return;
        }
        console.info('Succeeded in snapshotting window. Pixel bytes number: ' + pixelMap.getPixelBytesNumber());

        let region: image.Region = { x: 600, y: 0, size: { height: 1200, width: 400 } };
        if (pixelMap != undefined) {
          pixelMap.cropSync(region)
          this.snapshotPixelMap = pixelMap
        }
        // pixelMap.release(); // PixelMap使用完后及时释放内存
      });
    } catch (exception) {
      console.error(`Failed to obtain the main window. Cause code: ${exception.code}, message: ${exception.message}`);
    }
  }
}

更多关于HarmonyOS 鸿蒙Next如何自定义截图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,自定义截图通常涉及到对系统截图功能的扩展或定制,以满足特定需求。以下是对如何在HarmonyOS Next中自定义截图的简要说明:

HarmonyOS提供了丰富的API和框架,允许开发者对系统级功能进行定制。要自定义截图,开发者可以:

  1. 利用系统截图API:首先,需要熟悉HarmonyOS提供的截图API,这些API允许应用捕获当前屏幕的内容。通过调用这些API,开发者可以获取屏幕截图,并在此基础上进行自定义处理。

  2. 实现自定义逻辑:在获取到截图后,开发者可以在应用内部实现自定义逻辑,如添加水印、边框、滤镜效果等。这通常涉及到图像处理技术,如使用Canvas或其他图像处理库。

  3. 保存或分享截图:完成自定义处理后,开发者可以选择将截图保存到设备存储中,或者通过社交媒体、邮件等方式分享给其他人。

需要注意的是,自定义截图功能可能受到系统权限和安全策略的限制。因此,在开发过程中,务必确保应用已获取必要的权限,并遵循系统的安全规范。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部