【发布时间】:2021-10-13 19:25:15
【问题描述】:
我正在制作一个简单的视频捕捉应用。我使用 UIImageView 作为我的预览层,因为我可能需要使用 CIFilter。但问题是当图像从 CIImage 转换为 UIImage 并显示在图像视图中时,它的方向会发生变化。我该如何解决它
import UIKit
import AVKit
class VideoCaptureVC: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
@IBOutlet weak var VideoPreviewImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let capturesession = AVCaptureSession()
guard let rearcamera = AVCaptureDevice.default(for: .video) else{return}
// guard let mic = AVCaptureDevice.default(for: .audio) else{return}
guard let inputdevice = try? AVCaptureDeviceInput(device: rearcamera) else {return}
capturesession.addInput(inputdevice)
/*let previewlayer = AVCaptureVideoPreviewLayer(session: capturesession)
previewlayer.videoGravity = AVLayerVideoGravity.resizeAspect
previewlayer.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
previewlayer.frame = CGRect(x: 0, y: 0, width: 400, height: 200)
VideoPreviewView.layer.addSublayer(previewlayer)*/
let previewLayer = AVCaptureVideoPreviewLayer(session: capturesession)
view.layer.addSublayer(previewLayer)
let videoOutput = AVCaptureVideoDataOutput()
videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoquueu"))
capturesession.addOutput(videoOutput)
capturesession.startRunning()
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
let imagebuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
let cameraimage = CIImage(cvPixelBuffer: imagebuffer!)
DispatchQueue.main.async {
self.VideoPreviewImageView.image = UIImage(ciImage: cameraimage)
}
}
}
[这是我当前在图像视图中的视频预览][1]:https://i.stack.imgur.com/bJNpD.jpg
我可以通过创建扩展来修复它
extension UIImage {
func fixOrientation() -> UIImage {
if self.imageOrientation == UIImage.Orientation.up {
return self
}
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
self.draw(in: CGRect(x:0,y: 0, width: self.size.width, height: self.size.height))
let normalizedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return normalizedImage;
}
并将方向设置为向右
UIImage(ciImage: filteredimage,scale: 1.0,orientation: .right).fixOrientation()
【问题讨论】:
标签: ios swift uiimage core-image avkit