将CMSampleBuffer转换为UIImage的方法

2025-08-14  本文已影响0人  UILabelkell
    func convertSampleBufferToUIImage(_ sampleBuffer: CMSampleBuffer) -> UIImage? {
        guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
            return nil
        }

        let ciImage = CIImage(cvPixelBuffer: pixelBuffer)

        // 根据摄像头方向创建变换
        var transform: CGAffineTransform
        if currentCameraPosition == .front {
            // 前置摄像头:旋转+镜像
            transform = CGAffineTransform(rotationAngle: -.pi/2)
                .scaledBy(x: -1, y: 1)
        } else {
            // 后置摄像头:旋转
            transform = CGAffineTransform(rotationAngle: -.pi/2)
        }

        // 应用变换
        let transformedImage = ciImage.transformed(by: transform)

        // 使用CIContext渲染
        let context = CIContext(options: nil)
        guard let cgImage = context.createCGImage(transformedImage, from: transformedImage.extent) else {
            return nil
        }

        return UIImage(cgImage: cgImage)
    }
上一篇 下一篇

猜你喜欢

热点阅读