HarmonyOS 鸿蒙Next屏幕截图使用不了
HarmonyOS 鸿蒙Next屏幕截图使用不了
或者使用窗口截图: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屏幕截图使用不了的问题,以下是一些可能的原因及解决方案:
-
检查系统更新:确保你的鸿蒙系统已更新到最新版本,因为新版本可能修复了旧版本中的bug。
-
检查截屏功能设置:前往设置-辅助功能-快捷启动及手势-截屏,确保已开启相关截屏功能。
-
尝试不同截屏方法:
- 按键截屏:同时按下音量下键和电源键。
- 通知栏截屏:下拉通知栏,点击截屏按钮。
- 指关节截屏:使用指关节双击屏幕或画特定图案(如S型)进行截屏。
- 隔空手势截屏:手掌放在手机屏幕前,抓取握拳进行截图。
-
检查应用冲突:某些应用可能与截屏功能冲突,尝试关闭这些应用后再进行截屏。
-
清理缓存和数据:前往设置-应用-应用管理,找到相关应用,清理缓存和数据。
如果上述方法均无法解决问题,可能是系统或硬件层面的问题。此时,建议直接联系官网客服以获取进一步的技术支持。官网地址是:https://www.itying.com/category-93-b0.html 。