HarmonyOS 使用XComponent 播放视频通过等比例缩放调整播放区域,通过截图功能截取出的图片显示异常
操作步骤:
1、视频等比例显示,调整播放区域。
this.xComponentController!.setXComponentSurfaceRect({offsetX:offX,offsetY:offY,surfaceWidth:videoWidth ,surfaceHeight:videoHeight});
2、读取pixmap:
public async getVideoFrame():Promise<PixelMap>{
let rect:SurfaceRect = this.xComponentController?.getXComponentSurfaceRect() as SurfaceRect;
let region: image.Region = { x:rect.offsetX as number, y:rect.offsetY as number, size: { width: Math.trunc(rect.surfaceWidth) , height: Math.trunc(rect.surfaceHeight) } };
let pix = await image.createPixelMapFromSurface(this.surfaceId, region);
return pix;
}
x为0
y为160
width:1208
height: 680
3. 保存为图片
SaveButton({text:SaveDescription.SAVE_IMAGE})
.onClick(async () => {
try {
let pixmap = await this.livePlayerModel.getVideoFrame();
try{
const imagePackerApi = image.createImagePacker();
let packOpts : image.PackingOption = { format:"image/jpeg", quality:98 };
let data = await imagePackerApi.packing(pixmap, packOpts);
let context = getContext();
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let uri = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let len = await fs.write(file.fd, data);
await fs.close(file.fd);
}
catch (error){
this.onPlayerError(error);
}
}
catch (error){
this.onPlayerError(error);
}
})
4. 保存后的图片如附件,上面为黑色,下面缺失一部分画面。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
动态缩放XComponent大小和视频播放时的性能对比
2031浏览 • 1回复 待解决
HarmonyOS 图片截取,怎么把图片中的红框截取出来显示。并且(ImageFit.Fill) 这样显示
283浏览 • 1回复 待解决
ijkplayer结合XComponent组件播放视频时根据视频尺寸和组件尺寸设置视频缩放模式
1998浏览 • 0回复 待解决
简易视频播放,如何使用video组件实现视频播放功能
1059浏览 • 1回复 待解决
HarmonyOS 通过AudioPlayer播放音频如何设置播放速度?
259浏览 • 1回复 待解决
ArkTS使用AVPLayer实现视频播放时,如何实现全屏播放功能
2481浏览 • 0回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙HarmonyOS中通过AVPlayer实现视频全屏播放切换功能?
120浏览 • 0回复 待解决
HarmonyOS 关于GIF图片播放功能的咨询
42浏览 • 1回复 待解决
#鸿蒙通关秘籍# 在HarmonyOS开发图片预览功能中,如何通过调整Image组件的宽高和位置来实现图片的缩放与移动?
94浏览 • 0回复 待解决
小窗视频转全屏播放,播放的视频占满全屏
2062浏览 • 1回复 待解决
HarmonyOS har的resource目录下放视频,工程中引入har之后,无法通过video控件播放视频
142浏览 • 1回复 待解决
视频列表滑动中,如果刚完整进入可视区域,则进行播放,其他不在可视区域的停止播放
1848浏览 • 1回复 待解决
视频播放Player组件如何加速播放或者快进播放
7412浏览 • 1回复 待解决
HarmonyOS 的ijkplayder视频播放器是否支持rtsp格式的视频流播放?
210浏览 • 1回复 待解决
HarmonyOS使用Video组件播放视频会闪一下黑屏在播放
829浏览 • 1回复 待解决
在视频播放器播放时使竖屏播放切换为横屏播放如何更改视频的宽高?
9408浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙应用中实现视频播放器的暂停/播放功能?
120浏览 • 1回复 待解决
HarmonyOS 列表视频滚动播放
398浏览 • 1回复 待解决
HarmonyOS 视频列表播放问题
46浏览 • 1回复 待解决
使用AVPlayer实现视频播放器
1291浏览 • 1回复 待解决
HarmonyOS 视频播放相关
39浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙系统的视频播放功能?
133浏览 • 1回复 待解决
HarmonyOS 视频播放器Video播放在线视频问题
961浏览 • 1回复 待解决
HarmonyOS AVPlayer播放视频,退出页面后台播放时,视频会停止
499浏览 • 1回复 待解决
设置宽高,还是显示的完整视频流,只是设置的显示的画面(surface)宽高。
createPixelMapFromSurface接口是根据region把完整视频流的画面做裁剪,因为代码里传入的是显示surface的宽高,相较于完整视频流画面的宽高有缩小,所以导致保存的图片画面不全
如果希望截图完整视频播放画面,可以将该createPixelMapFromSurface接口入参region的宽高设置的和视频大小保持一致:
demo中Region修改为: