问题描述
我在我的应用中的 2 个场景中遇到了这个方向问题。
- 视图控制器加载 >
TensorFlow
初始化 >UIImage
设置为UIImageView
- PreviewView 使用
rear
摄像头 > 切换到front
(> 切换到rear
)
在每种情况下,orientation
的 UIImage
从 up
变为 landscape right
。我从这里尝试了很多解决方案,但似乎并没有解决问题。在这两种情况下,我仍然以错误的方向获取图像。
这是一些代码:
- 从 CMSampleBuffer 获取图像
func captureOutput(_ output: AVCaptureOutput,didOutput sampleBuffer: CMSampleBuffer,from connection: AVCaptureConnection) {
...
let points = modelDataHandler.runModel(onFrame: imagePixelBuffer)
...
}
func runModel(onFrame pixelBuffer: CVPixelBuffer) -> [Corners : CGFloat] {
...
guard let thumbnailPixelBuffer = pixelBuffer.uiImageConverted() else {
return [:]
}
...
}
extension CVPixelBuffer {
func uiImageConverted() -> UIImage? {
let ciImage = CIImage(cvPixelBuffer: self)
let context = CIContext(options: nil)
guard let cgImage = context.createCGImage(ciImage,from: CGRect(origin: .zero,size: CGSize(width: CVPixelBufferGetWidth(self),height: CVPixelBufferGetHeight(self)))) else { return nil }
let uiImage = UIImage(cgImage: cgImage)
return uiImage
}
}
- 将 UIImage 设置为 UIImageView
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tfQueue.async { [self] in
modelDataHandler = ModelDataHandler()
guard modelDataHandler != nil else {
fatalError()
}
DispatchQueue.main.async {
spinnerStack.isHidden = true
spinner.stopAnimating()
runButton.isEnabled = true
runButton.tintColor = .label
imageView.image = imageInfo?.originalImage.fixedOrientation()
imageWidth = imageInfo?.originalImage.size.width ?? 0
imageHeight = imageInfo?.originalImage.size.height ?? 0
}
}
}
extension UIImage {
func fixedOrientation() -> UIImage? {
guard let cImage = cgImage else { return nil }
let currentOrientation = UIDevice.current.orientation
let temp = CIImage(cgImage: cImage)
var ciImage = temp
switch currentOrientation {
case .unknown,.portrait:
ciImage = temp.oriented(forExifOrientation: 6)
case .landscapeRight:
ciImage = temp.oriented(forExifOrientation: 3)
case .landscapeLeft:
ciImage = temp.oriented(forExifOrientation: 1)
default:
break
}
guard let cgImage = CIContext(options: nil).createCGImage(ciImage,from: ciImage.extent) else { return nil }
let fixedImage = UIImage(cgImage: cgImage)
return fixedImage
}
}
如何解决方向问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)