采用capturevideodataoutput图片合成ok,注意,此方式合成后的图片无须进行方向旋转
This commit is contained in:
parent
0b5b42c2bd
commit
7821f7be4d
Binary file not shown.
@ -14,8 +14,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "593"
|
||||
endingLineNumber = "593"
|
||||
startingLineNumber = "612"
|
||||
endingLineNumber = "612"
|
||||
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -30,8 +30,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "585"
|
||||
endingLineNumber = "585"
|
||||
startingLineNumber = "604"
|
||||
endingLineNumber = "604"
|
||||
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -62,8 +62,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "549"
|
||||
endingLineNumber = "549"
|
||||
startingLineNumber = "568"
|
||||
endingLineNumber = "568"
|
||||
landmarkName = "photoLibrary()"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -457,38 +457,6 @@
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "2332D3C8-7CB7-4C2D-9D3C-D9A7D05737DE"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "172"
|
||||
endingLineNumber = "172"
|
||||
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "02F226A8-01C1-4FB7-8724-3FB114CBBC79"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/View/CCSpatialDisplayTypeView/CCSpatialDisplayTypeView.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "170"
|
||||
endingLineNumber = "170"
|
||||
landmarkName = "init(menuWidth:arrow:datas:configures:dissMissCallback:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
@ -547,8 +515,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "186"
|
||||
endingLineNumber = "186"
|
||||
startingLineNumber = "194"
|
||||
endingLineNumber = "194"
|
||||
landmarkName = "compositeSpatialPhoto()"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -556,32 +524,80 @@
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "F92BC10F-CFF7-4311-8706-052FD06BD96E"
|
||||
uuid = "E6673529-7FC7-4709-A0A8-E857D68BA3D9"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "252"
|
||||
endingLineNumber = "252"
|
||||
landmarkName = "compositeSpatialPhoto()"
|
||||
startingLineNumber = "554"
|
||||
endingLineNumber = "554"
|
||||
landmarkName = "gotoVideoTransformVC(url:asset:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "C6506EAA-0954-41A9-A944-2AFB157D551F"
|
||||
uuid = "389BFC3B-B70F-492B-AA47-FD20BD63E8A7"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialShootController/CCSpatialShootController+Generate.swift"
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "259"
|
||||
endingLineNumber = "259"
|
||||
landmarkName = "compositeSpatialPhoto()"
|
||||
startingLineNumber = "628"
|
||||
endingLineNumber = "628"
|
||||
landmarkName = "getOrientationAndResolutionSizeForVideo(asset:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "9CE84387-A6DC-4430-8EDF-1C90B157FB36"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "137"
|
||||
endingLineNumber = "137"
|
||||
landmarkName = "joinImages_red_blue(lciImage:rciImage:scale:rbImage:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "825FE654-2C40-4F76-B5D2-2EA14A75D54B"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "93"
|
||||
endingLineNumber = "93"
|
||||
landmarkName = "joinImages_red_blue(lciImage:rciImage:scale:rbImage:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "8E29E821-B4B4-49F7-A00E-E82207F349CA"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialPhotoDisplayController/CCSpatialPhotoDisplayEx.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "133"
|
||||
endingLineNumber = "133"
|
||||
landmarkName = "joinImages_red_blue(lciImage:rciImage:scale:rbImage:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
|
||||
@ -9,105 +9,141 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
<integer>36</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 10.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>11</integer>
|
||||
<integer>45</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 11.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>12</integer>
|
||||
<integer>46</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 12.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>47</integer>
|
||||
<integer>48</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 13.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>48</integer>
|
||||
<integer>49</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 14.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>49</integer>
|
||||
<integer>50</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 15.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>47</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 16.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>51</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 17.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>52</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 18.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>53</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 19.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>54</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 2.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
<integer>37</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 20.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>55</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 3.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
<integer>38</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 4.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
<integer>39</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 5.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
<integer>40</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 6.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
<integer>41</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 7.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>7</integer>
|
||||
<integer>42</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 8.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>8</integer>
|
||||
<integer>43</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground) 9.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>10</integer>
|
||||
<integer>44</integer>
|
||||
</dict>
|
||||
<key>Promises (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
<integer>35</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
@ -546,8 +546,7 @@ class CCSpatialPhotoDisplayController: BaseController {
|
||||
}else if(selectedIndex == 2){//红蓝立体
|
||||
|
||||
var ri = joinImages_red_blue(lciImage: lciImage, rciImage: rciImage, scale: currentScale,rbImage: redBlueImage)
|
||||
// var ri = UIImage(ciImage: lastImg)
|
||||
ri = ri.getUpImg(imgOrigOritentation: self.imgOritentation )
|
||||
// ri = ri.getUpImg(imgOrigOritentation: self.imgOritentation )
|
||||
redBlueImage = ri
|
||||
self.mImgView.image = ri
|
||||
|
||||
|
||||
@ -158,10 +158,10 @@ extension CCSpatialPhotoDisplayController {
|
||||
let edS = 20 //比列
|
||||
|
||||
var left = UIImage(ciImage: leftImage )
|
||||
left = left.getUpImg(imgOrigOritentation: imgOritentation)
|
||||
// left = left.getUpImg(imgOrigOritentation: imgOritentation)
|
||||
|
||||
var right = UIImage(ciImage: rightImage )
|
||||
right = right.getUpImg(imgOrigOritentation: imgOritentation)
|
||||
// right = right.getUpImg(imgOrigOritentation: imgOritentation)
|
||||
|
||||
//获取缩放图片
|
||||
let (n_left,n_left_size) = getImgWithScale(image: left, scale: scale)
|
||||
|
||||
@ -18,11 +18,13 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
|
||||
//视频、音频回调
|
||||
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
|
||||
if shootingMode == .CCShootingMode_Camera && self.isTakePhoto{
|
||||
if shootingMode == .CCShootingMode_Camera {
|
||||
takePhotoSemaphore.wait()
|
||||
if self.isTakePhoto {
|
||||
print("xxsddd:\(Thread.current)")
|
||||
|
||||
if output == wideAngleCameraVideoDataOutput && self.isTakePhoto_wideCamera {
|
||||
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer) {
|
||||
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer,orientation: connection.videoOrientation) {
|
||||
imgs.add(firstFrame)
|
||||
self.isTakePhoto_wideCamera = false
|
||||
}
|
||||
@ -30,7 +32,7 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
print("wide Angle firstframe is lost....")
|
||||
}
|
||||
} else if output == ultraWideCameraVideoDataOutput && self.isTakePhoto_ultraCamera{
|
||||
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer) {
|
||||
if let firstFrame = imageFromSampleBuffer(sampleBuffer: sampleBuffer,orientation: connection.videoOrientation) {
|
||||
imgs.add(firstFrame)
|
||||
self.isTakePhoto_ultraCamera = false
|
||||
}
|
||||
@ -48,6 +50,8 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
else {
|
||||
print("images 少于2张....")
|
||||
}
|
||||
}
|
||||
|
||||
takePhotoSemaphore.signal()
|
||||
|
||||
}
|
||||
@ -80,24 +84,28 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
|
||||
|
||||
//通过samplebuffer生成uiimage
|
||||
func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
|
||||
// 获取像素缓冲区
|
||||
func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer,orientation:AVCaptureVideoOrientation ) -> UIImage? {
|
||||
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
|
||||
|
||||
// 创建CoreImage图像
|
||||
let ciImage = CIImage(cvImageBuffer: imageBuffer)
|
||||
|
||||
// 将CIImage转换为CGImage
|
||||
if let cgImage = CIContext(options: nil).createCGImage(ciImage, from: ciImage.extent) {
|
||||
// 创建UIImage
|
||||
let image = UIImage(cgImage: cgImage)
|
||||
let ciImage = CIImage(cvPixelBuffer: imageBuffer)
|
||||
let temporaryContext = CIContext(options: nil)
|
||||
guard let cgImage = temporaryContext.createCGImage(ciImage, from: ciImage.extent) else { return nil }
|
||||
print("rect:\(ciImage.extent)")
|
||||
let image = UIImage(cgImage: cgImage, scale: UIScreen.main.scale, orientation: getImgOrientation(orientation: orientation))
|
||||
return image
|
||||
}
|
||||
|
||||
return nil
|
||||
func getImgOrientation(orientation:AVCaptureVideoOrientation )->UIImage.Orientation {
|
||||
switch orientation {
|
||||
case .portrait:
|
||||
return .up
|
||||
case .portraitUpsideDown:
|
||||
return .down
|
||||
case .landscapeRight:
|
||||
return .right
|
||||
case .landscapeLeft:
|
||||
return .left
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -184,7 +192,7 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
let url = URL.documentsDirectory.appending(path:"aaa12.HEIC")
|
||||
let destination = CGImageDestinationCreateWithURL(url as CFURL, UTType.heic.identifier as CFString, 2, nil)!
|
||||
var oo = imageCGImagePropertyOrientation.rawValue
|
||||
let orientation_cf = CFNumberCreate(nil, CFNumberType.intType, &oo)
|
||||
// let orientation_cf = CFNumberCreate(nil, CFNumberType.intType, &oo)
|
||||
let properties1 = [
|
||||
kCGImagePropertyGroups: [
|
||||
kCGImagePropertyGroupIndex: 0,
|
||||
@ -192,11 +200,11 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
kCGImagePropertyGroupImageIndexLeft: 0,
|
||||
kCGImagePropertyGroupImageIndexRight: 1,
|
||||
],
|
||||
kCGImagePropertyTIFFDictionary:[
|
||||
kCGImagePropertyOrientation:orientation_cf,
|
||||
],
|
||||
|
||||
kCGImagePropertyOrientation:orientation_cf as Any,
|
||||
// kCGImagePropertyTIFFDictionary:[
|
||||
// kCGImagePropertyOrientation:orientation_cf,
|
||||
// ],
|
||||
//
|
||||
// kCGImagePropertyOrientation:orientation_cf as Any,
|
||||
kCGImagePropertyHEIFDictionary: [
|
||||
kIIOMetadata_CameraExtrinsicsKey: [
|
||||
kIIOCameraExtrinsics_CoordinateSystemID: 0,
|
||||
@ -220,10 +228,10 @@ extension CCSpatialShootController: AVCaptureAudioDataOutputSampleBufferDelegate
|
||||
kCGImagePropertyGroupImageIndexLeft: 0,
|
||||
kCGImagePropertyGroupImageIndexRight: 1,
|
||||
],
|
||||
kCGImagePropertyTIFFDictionary:[
|
||||
kCGImagePropertyOrientation:orientation_cf,
|
||||
],
|
||||
kCGImagePropertyOrientation:orientation_cf as Any,
|
||||
// kCGImagePropertyTIFFDictionary:[
|
||||
// kCGImagePropertyOrientation:orientation_cf,
|
||||
// ],
|
||||
// kCGImagePropertyOrientation:orientation_cf as Any,
|
||||
|
||||
kCGImagePropertyHEIFDictionary: [
|
||||
kIIOMetadata_CameraExtrinsicsKey: [
|
||||
|
||||
Loading…
Reference in New Issue
Block a user