HarmonyOS 鸿蒙Next屏幕截图使用不了

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

HarmonyOS 鸿蒙Next屏幕截图使用不了

import screenshot from ‘@ohos.screenshot’; 这个包引用不了,我的"targetSdkVersion": "5.0.0(12)"已经是api 12了,为啥引用直接报错

3 回复
@ohos.screenshot(屏幕截图)是系统接口,三方应用用不了,可以使用componentSnapshot (组件截图)。参考地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-componentsnapshot-V5

或者使用窗口截图: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(<span class="hljs-keyword">this</span>.snapshotPixelMap).width(<span class="hljs-number">200</span>).height(<span class="hljs-number">200</span>).objectFit(ImageFit.ScaleDown).borderWidth(<span class="hljs-number">1</span>)
}

}

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(<span class="hljs-string">'Succeeded in snapshotting window. Pixel bytes number: '</span> + pixelMap.getPixelBytesNumber());
    <span class="hljs-keyword">this</span>.snapshotPixelMap = pixelMap
    <span class="hljs-comment">// pixelMap.release(); // PixelMap使用完后及时释放内存</span>
  });
} <span class="hljs-keyword">catch</span> (exception) {
  console.error(`Failed to obtain the main window. Cause code: ${exception.code}, message: ${exception.message}`);
}

} }

无法做到指定位置,只提供了组件截图,用这个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

尝试下这个demo:

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(<span class="hljs-keyword">this</span>.snapshotPixelMap).width(<span class="hljs-number">200</span>).height(<span class="hljs-number">200</span>).objectFit(ImageFit.ScaleDown).borderWidth(<span class="hljs-number">1</span>).backgroundColor(Color.Green)
}.width(<span class="hljs-string">"100%"</span>).height(<span class="hljs-string">"100%"</span>)
.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(<span class="hljs-string">'Succeeded in snapshotting window. Pixel bytes number: '</span> + pixelMap.getPixelBytesNumber());
    <span class="hljs-keyword">let</span> region: image.Region = { x: <span class="hljs-number">600</span>, y: <span class="hljs-number">0</span>, size: { height: <span class="hljs-number">1200</span>, width: <span class="hljs-number">400</span> } };

    <span class="hljs-keyword">if</span> (pixelMap != <span class="hljs-literal">undefined</span>) {
      pixelMap.cropSync(region)
      <span class="hljs-keyword">this</span>.snapshotPixelMap = pixelMap
    }
    <span class="hljs-comment">// pixelMap.release(); // PixelMap使用完后及时释放内存</span>
  });
} <span class="hljs-keyword">catch</span> (exception) {
  console.error(`Failed to obtain the main window. Cause code: ${exception.code}, message: ${exception.message}`);
}

} }

作为IT专家,对于HarmonyOS 鸿蒙Next屏幕截图使用不了的问题,以下是一些可能的原因及解决方案:

  1. 检查系统更新:确保你的鸿蒙系统已更新到最新版本,因为新版本可能修复了旧版本中的bug。

  2. 检查截屏功能设置:前往设置-辅助功能-快捷启动及手势-截屏,确保已开启相关截屏功能。

  3. 尝试不同截屏方法

    • 按键截屏:同时按下音量下键和电源键。
    • 通知栏截屏:下拉通知栏,点击截屏按钮。
    • 指关节截屏:使用指关节双击屏幕或画特定图案(如S型)进行截屏。
    • 隔空手势截屏:手掌放在手机屏幕前,抓取握拳进行截图。
  4. 检查应用冲突:某些应用可能与截屏功能冲突,尝试关闭这些应用后再进行截屏。

  5. 清理缓存和数据:前往设置-应用-应用管理,找到相关应用,清理缓存和数据。

如果上述方法均无法解决问题,可能是系统或硬件层面的问题。此时,建议直接联系官网客服以获取进一步的技术支持。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部