diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate index 9060bda..efed266 100644 Binary files a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 33b80ab..c72d495 100644 --- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -403,28 +403,13 @@ filePath = "SwiftProject/Project/Util/ZZHImageExtension.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "79" - endingLineNumber = "79" + startingLineNumber = "89" + endingLineNumber = "89" landmarkName = "getRotateFrom(_:)" landmarkType = "7"> - - + + @@ -514,8 +514,8 @@ filePath = "SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "458" - endingLineNumber = "458" + startingLineNumber = "459" + endingLineNumber = "459" landmarkName = "collectionView(_:cellForItemAt:)" landmarkType = "7"> diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift index 9727b62..ebf335d 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift @@ -11,6 +11,8 @@ import Photos import AVKit import VideoToolbox +let CustomPlayerShareSemaphore = DispatchSemaphore(value: 1) + extension ZZHCustomPlayer { func getPlayerItem() -> AVPlayerItem { @@ -22,7 +24,9 @@ extension ZZHCustomPlayer { print("self 被销毁了.....") return } + CustomPlayerShareSemaphore.wait() weakSelf.convertFrame(request:request) + CustomPlayerShareSemaphore.signal() } completionHandler: { ac, err in if err != nil { @@ -72,7 +76,7 @@ extension ZZHCustomPlayer { } else { ciImg = self.otherModeImgWithMode(mode: self.selectedIndex,compositionTime: compositionTime) - guard let ciImg else { + guard ciImg != nil else { print("未合成成功.....,此处将进行重新构建assetoutput,然后再次重拾") quickLoadAReaderWhenSeek(startCT: compositionTime) ciImg = self.otherModeImgWithMode(mode: self.selectedIndex,compositionTime: compositionTime) diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift index e6ae799..30306b0 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift @@ -459,10 +459,10 @@ class CustomParamBoardView: UIView { //更新缩放的标题文本 func updateScaleTitleWithValue(value:Float) { - let minValue = 0.6 - let maxValue = 1.5 + let minValue = 0.3 + let maxValue = 1.8 let resultValue = minValue + (maxValue - minValue) * Double(value) - let formattedValue = String(format: "\(NSLocalizedString("v1.6_缩放", comment: ""))%.f%%", (resultValue - 0.5) * 200) + let formattedValue = String(format: "\(NSLocalizedString("v1.6_缩放", comment: ""))%.f%%", (resultValue) * 100) self.scaleTitleLabel?.text = formattedValue if let scaleCallback = self.scaleCallback { scaleCallback(CGFloat(resultValue)) @@ -471,10 +471,10 @@ class CustomParamBoardView: UIView { //提供给它的类方法调用 func exUpdateScaleTitleWithValue(resultValue:CGFloat) { - let formattedValue = String(format: "\(NSLocalizedString("v1.6_缩放", comment: ""))%.f%%", (resultValue - 0.5) * 200) + let formattedValue = String(format: "\(NSLocalizedString("v1.6_缩放", comment: ""))%.f%%", (resultValue) * 100) self.scaleTitleLabel?.text = formattedValue - let minValue = 0.6 - let maxValue = 1.5 + let minValue = 0.3 + let maxValue = 1.8 // let resultValue = minValue + (maxValue - minValue) * Double(value) let v = (resultValue - minValue) / (maxValue - minValue) self.scaleSlider?.slider?.value = Float(v) diff --git a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift index 5057d4e..d3257b3 100644 --- a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift +++ b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift @@ -20,7 +20,7 @@ class PlayByTransferConvertor { // print("sta.....>>>>>>>thread") while let nextSampleBuffer = assetOutput.copyNextSampleBuffer() { - var presentationTime = CMSampleBufferGetPresentationTimeStamp(nextSampleBuffer) + let presentationTime = CMSampleBufferGetPresentationTimeStamp(nextSampleBuffer) // print("presentationTime: \(presentationTime) \ntime: \(time)") // if presentationTime! > time {//如果当前获取的buffer的时间>time的时间,则直接返回即可 // print("如果当前获取的buffer的时间>time的时间,则直接返回即可...") @@ -186,30 +186,36 @@ class PlayByTransferConvertor { //获取缩放图片 - let n_left = getImgWithScale(image: left, scale: scale - 0.5) - let n_right = getImgWithScale(image: right, scale: scale - 0.5) + let (n_left,n_left_size) = getImgWithScale(image: left, scale: scale) + let (n_right,n_right_size) = getImgWithScale(image: right, scale: scale) + //获取调整了瞳距的图片 let x_offset = CGFloat(abs(ed) * edS) //关于瞳距的x偏移量 let imageWidth = left.size.width*0.5 - x_offset let imageHeight = left.size.height - let ed_left = getImgWithED(image: n_left, imgWidth: imageWidth) - let ed_right = getImgWithED(image: n_right, imgWidth: imageWidth) - - + let (ed_left,last_left_size) = getImgWithED(image: n_left, imgWidth: imageWidth,imageRealSize: n_left_size) + let (ed_right,last_right_size) = getImgWithED(image: n_right, imgWidth: imageWidth,imageRealSize: n_right_size) + print("n_left_size:\(n_left_size)\nlast_left_size\(last_left_size)") +// testImageUi(image: ed_left) let newImageSize = left.size UIGraphicsBeginImageContextWithOptions(newImageSize, false, 1); if (ed > 0) {//左视图宽度减小,同时x点的坐标值为0;右视图宽度减小,同时x点的坐标值增加 - ed_left.draw(in: CGRect(x:0, y:0, width:imageWidth, height:imageHeight)) - ed_right.draw(in: CGRect(x:left.size.width/2 + x_offset, y:0, width:imageWidth, height:imageHeight)) + ed_left.draw(in: CGRect(x:0, y:0, width:last_left_size.width, height:last_left_size.height)) + ed_right.draw(in: CGRect(x:left.size.width/2 + x_offset, y:0, width:last_right_size.width, height:last_right_size.height)) } else if (ed < 0) { - ed_left.draw(in: CGRect(x:x_offset, y:0, width:imageWidth, height:imageHeight)) - ed_right.draw(in: CGRect(x:left.size.width*0.5, y:0, width:imageWidth, height:imageHeight)) + ed_left.draw(in: CGRect(x:x_offset, y:0, width:last_left_size.width, height:last_left_size.height)) + ed_right.draw(in: CGRect(x:left.size.width*0.5, y:0, width:last_right_size.width, height:last_right_size.height)) } else {//瞳距没有改变的情况 - ed_left.draw(in: CGRect(x:0, y:0, width:imageWidth, height:imageHeight)) - ed_right.draw(in: CGRect(x:imageWidth, y:0, width:imageWidth, height:imageHeight)) + let leftRect = CGRect(x:(imageWidth - n_left_size.width) * 0.5, y:(imageHeight - n_left_size.height) * 0.5 , width:n_left_size.width, height:n_left_size.height) + ed_left.draw(in:leftRect ) + + let rightRect = CGRect(x:imageWidth + (imageWidth - n_right_size.width) * 0.5 , y:(imageHeight - n_right_size.height) * 0.5, width:n_right_size.width, height:n_right_size.height) + ed_right.draw(in:rightRect ) + + print("imageWidth:\(imageWidth) \ned_left.size:\(ed_left.size) \nl:\(leftRect) \nr:\(rightRect)") } @@ -220,31 +226,66 @@ class PlayByTransferConvertor { return ci } - //图像缩放 - func getImgWithScale(image:UIImage,scale:CGFloat) -> UIImage { - let dRect = CGSizeMake(image.size.width*0.5, image.size.height) - let imgWidth = image.size.width*scale - let imgHeight = image.size.height*scale - UIGraphicsBeginImageContextWithOptions(dRect, false, 1); - image.draw(in: CGRectMake((dRect.width - imgWidth)*0.5, (dRect.height - imgHeight)*0.5, imgWidth, imgHeight)) - let newImage = UIGraphicsGetImageFromCurrentImageContext()! - UIGraphicsEndImageContext(); - return newImage + //图像缩放 调整默认scale,默认值应当为1 + func getImgWithScale(image:UIImage,scale:CGFloat) -> (UIImage,CGSize) { + //获取原始的rect + let originSize = CGSize(width: image.size.width*0.5, height: image.size.height*0.5) + + var newImage = image + var newSize = originSize//作图的区域 + + if scale > 1 {//图片会被裁减,但size的宽度不会改变,而高度会随scale发生改变 + //计算放大图片需要用于截取图片的size, + //本次height在画布上的增量 + let Hs_add = (image.size.height - image.size.height*0.5)*(scale - 1) + //根据本次在画布上的增量height重新计算画布size + newSize = CGSizeMake(originSize.width, originSize.height + Hs_add) + + //本次根据scale进行初步计算的裁剪区域size + let cutSize = CGSizeMake((2 - scale)*(image.size.height * newSize.width/newSize.height),(2 - scale) * image.size.height) + + let cutRect = CGRectMake((image.size.width - cutSize.width)*0.5, (image.size.height - cutSize.height) * 0.5, cutSize.width, cutSize.height) + newImage = image.imageAtRect(rect: cutRect)! + } + else if scale < 1 {//图片不会被裁减,但size会被缩小 + //计算被等比缩小的size + newSize = CGSizeMake(scale*originSize.width, scale*originSize.height) + } + + return (newImage,newSize) } - //图像瞳距 - func getImgWithED(image:UIImage,imgWidth:CGFloat) -> UIImage { -// let dRect = CGSizeMake(imgWidth, image.size.height) -// -// UIGraphicsBeginImageContextWithOptions(dRect, false, 1); -// image.draw(in: CGRectMake((image.size.width - imgWidth)*0.5, 0, image.size.width, dRect.height)) -// let newImage = UIGraphicsGetImageFromCurrentImageContext()! -// UIGraphicsEndImageContext(); -// return newImage -// let dSize = CGSizeMake(imgWidth, image.size.height) - let dRect = CGRectMake((image.size.width - imgWidth) * 0.5, 0, imgWidth, image.size.height) + //图像瞳距,参数条件必须满足:image能够等比缩放后填充满imageRealSize,即image的真实size与imageRealSize预期size并不要求一致,但要求等比 + func getImgWithED(image:UIImage,imgWidth:CGFloat,imageRealSize:CGSize) -> (UIImage,CGSize) { + if imageRealSize.width <= imgWidth { + + print("瞳距返回,不用处理") + return (image,imageRealSize) + } + print("瞳距要处理") + let s = imageRealSize.height / image.size.height + let dRect = CGRectMake((imageRealSize.width - imgWidth) * s * 0.5, 0, imgWidth, image.size.height) let newImage = image.imageAtRect(rect: dRect) - return newImage! + return (newImage!,CGSize(width: imgWidth, height: imageRealSize.height)) + } + + func testImageUi(image:UIImage) { + DispatchQueue.main.async { + var imageView = KWindow?.viewWithTag(9988) as? UIImageView + if let iv = imageView { + iv.image = image + } + else { + imageView = UIImageView(frame: CGRect(x: 20, y: 100, width: KScreenWidth*0.5, height: 260)) + imageView?.tag = 9988 + imageView?.backgroundColor = .red + imageView?.contentMode = .scaleAspectFit + imageView?.clipsToBounds = true + imageView?.image = image + KWindow?.addSubview(imageView!) + } + } + } func joinImages_backup( leftImage:CIImage, rightImage:CIImage) -> CIImage { diff --git a/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift b/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift index 4565f02..727c277 100644 --- a/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift +++ b/SwiftProject/SwiftProject/Project/Util/ZZHImageExtension.swift @@ -8,11 +8,21 @@ import Foundation import UIKit import CoreImage +let EXImageContext = CIContext() extension UIImage { func imageAtRect(rect: CGRect) -> UIImage? { // 确保CGRect在图片范围内 - guard let cgImage = self.cgImage else { return nil } + guard let cgImage = self.cgImage else { + guard let ciImage = self.ciImage else { + return nil + } + // 将CIImage转换为CGImage + let imageRef = ciImage.cropped(to: rect) + //此处根据文档说明要求,必须转换坐标才能正常展示 + let final = EXImageContext.createCGImage(imageRef, from:imageRef.extent) + return UIImage(cgImage: final!) + } let imageRef = cgImage.cropping(to: rect) return imageRef == nil ? nil : UIImage(cgImage: imageRef!) } diff --git a/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift b/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift index 8be5b53..c217621 100644 --- a/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift +++ b/SwiftProject/SwiftProject/Project/View/Album/CCSpaceAlbumFliterPopView/CCSpaceAlbumFilterPopView2.swift @@ -445,9 +445,10 @@ extension CCSpaceAlbumFilterPopView2:UICollectionViewDataSource, UICollectionVie let model:CCSpaceAlbumFliterModel = dataSource[indexPath.item] +// let s = UIScreen.main.scale +// cell.imageView.image = model.image?.preparingThumbnail(of: CGSize(width: cell.imageView.size.width*s, height: cell.imageView.size.height*s)) cell.imageView.image = model.image - if model.assetType == .image { cell.frameCountLabel.text = NSLocalizedString("空间", comment: "")