From 03ae208bd768bfa98a015f05de173b55314bbbe3 Mon Sep 17 00:00:00 2001 From: bluesea <307723040@qq.com> Date: Sun, 28 Apr 2024 18:13:42 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E4=B8=B2=E6=B5=81=E6=97=B6?= =?UTF-8?q?,=E9=A1=B6=E9=83=A8=E6=8C=89=E9=92=AE=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E6=96=87=E4=BD=93=E7=B1=BB=E5=9E=8B=E4=B8=8D=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98;=202.=E6=B7=BB=E5=8A=A0hsbs=E7=9A=84?= =?UTF-8?q?=E7=BC=A9=E6=94=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CCSpatialVideoDisplayController.swift | 4 +- .../Util/PlayByTransferConvertor.swift | 51 ++++++++++++++++--- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift index 0eb56fd..7d46665 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift @@ -26,8 +26,8 @@ enum SpatialType : Int { case redBlueSolid = 2 case crossedEyes = 3 //以下两种标记:外部串流时使用 - case hsbs = 4 - case fsbs = 5 + case hsbs = 5 + case fsbs = 4 } class CCSpatialVideoDisplayController: BaseController { diff --git a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift index a672964..1b36e1c 100644 --- a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift +++ b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift @@ -56,7 +56,7 @@ class PlayByTransferConvertor { case .hsbs: cwidth = left.size.width cheight = left.size.height - newpb = joinImages_sbs(left: left, right: right, imgWidth: cwidth, imgHeight:cheight ) + newpb = joinImages_sbs(left: left, right: right, imgWidth: cwidth, imgHeight:cheight,scale: scale) break case .fsbs: // cwidth = left.size.width @@ -167,20 +167,55 @@ class PlayByTransferConvertor { } - //将两张图片合成一张图片 SBS - func joinImages_sbs( left:UIImage, right:UIImage,imgWidth:CGFloat,imgHeight:CGFloat) -> CIImage { - let newImageSize = CGSize(width:imgWidth, height: imgHeight); - UIGraphicsBeginImageContextWithOptions(newImageSize, false, 1); - left.draw(in: CGRect(x:0, y:0, width:imgWidth/2, height:imgHeight)) - right.draw(in: CGRect(x:imgWidth/2, y:0, width:imgWidth/2, height:imgHeight)) + //将两张图片合成一张图片 HSBS 高度不变,宽度减半 + func joinImages_sbs( left:UIImage, right:UIImage,imgWidth:CGFloat,imgHeight:CGFloat,scale:CGFloat) -> CIImage { + //画布区域 + let drawSize = CGSize(width:imgWidth, height: imgHeight); + //获取左边调整后的视图和作画size + let (scale_left,scale_left_size) = getHSBS_ImgWithScale(image: left, scale: scale) + //获取右边调整后的视图和作画size + let (scale_right,scale_right_size) = getHSBS_ImgWithScale(image: right, scale: scale) + //左右图片分别均分的画布区域宽度 + let perImgWidth = drawSize.width*0.5 + UIGraphicsBeginImageContextWithOptions(drawSize, false, 1); + //左边的绘画区域 + let left_draw_rect = CGRectMake((perImgWidth - scale_left_size.width)*0.5, (drawSize.height - scale_left_size.height)*0.5, scale_left_size.width, scale_left_size.height) + scale_left.draw(in: left_draw_rect) + + //右边的绘画区域 + let right_draw_rect = CGRectMake((perImgWidth - scale_left_size.width)*0.5 + perImgWidth, (drawSize.height - scale_right_size.height)*0.5, scale_right_size.width, scale_right_size.height) + scale_right.draw(in: right_draw_rect) + let image = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext(); - + let ci = CIImage(cgImage: image.cgImage!) return ci } + //图像缩放 调整默认scale,默认值应当为1 + func getHSBS_ImgWithScale(image:UIImage,scale:CGFloat) -> (UIImage,CGSize) { + //获取原始的rect + let originSize = CGSize(width: image.size.width*0.5, height: image.size.height) + + var newImage = image + var newSize = originSize//作图的区域 + + if scale > 1 { + let scalSize = CGSizeMake((2-scale)*image.size.width, (2-scale)*image.size.height) + let scalRect = CGRect(origin: CGPoint(x: (image.size.width - scalSize.width)*0.5, y: (image.size.height - scalSize.height)*0.5), size: scalSize) + newImage = image.imageAtRect(rect: scalRect)! + } + else if scale < 1 {//图片不会被裁减,但size会被缩小 + //计算被等比缩小的size + newSize = CGSizeMake(scale*originSize.width, scale*originSize.height) + } + return (newImage,newSize) + } + + + //FSBS func joinImages_fsbs( left:UIImage, right:UIImage,imgWidth:CGFloat,imgHeight:CGFloat) -> CIImage { let newImageSize = CGSize(width:imgWidth, height: imgHeight);//在播放过程中,务必保证宽、高尺寸不变