gpt4 book ai didi

ios - 使用 CIFilter 围绕中心旋转 CIImage

转载 作者:行者123 更新时间:2023-11-28 18:02:40 25 4
gpt4 key购买 nike

我正在尝试旋转 CMSampleBuffer(来自相机)的像素数据并将其显示在 UIImageView 中。我不想旋转 View 本身。它必须是实际的像素数据。

我抓取提要,将其转换为 CIImage,然后使用 CIFilter 旋转它。我在设置必须围绕其旋转的点时遇到问题。现在它围绕左下角旋转。我想围绕它的中心旋转它。

 func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {

//create pixelbuffer

let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let context = CIContext.init(options: nil)

// calculating the radians to rotate the ciimage by
let radians : Float = atan2f(Float(boxView!.transform.b), Float(boxView!.transform.a));
//create ciimage from the pixelbuffer

let options = [kCVPixelBufferCGImageCompatibilityKey as String: true,
kCVPixelBufferCGBitmapContextCompatibilityKey as String: true,]
let ci = CIImage.init(cvPixelBuffer: pixelBuffer, options: options)
//transform filter
let filter = CIFilter.init(name: "CIAffineTransform")
//set translation point to center
var transform = CGAffineTransform(translationX: self.view.frame.midX, y: self.view.frame.midY)
//rotate
transform = CGAffineTransform(rotationAngle:CGFloat(radians))
// set translation point back again to normal
var transformBack = CGAffineTransform(translationX: -self.view.frame.midX, y: -self.view.frame.midY)
//applying the transform
transform.concatenating(transformBack)

filter!.setValue(transform, forKey: kCIInputTransformKey)
filter!.setValue(ci, forKey: kCIInputImageKey)
let output = filter?.outputImage
let img = context.createCGImage(output!, from: imageView!.frame)
// send image to be displayed
self.imageView!.image = UIImage(cgImage: img!)

}

最佳答案

swift 5:

let image = CIImage(cvPixelBuffer: yourBuffer)
let rotatedImage = image.oriented(.right)

Docs

关于ios - 使用 CIFilter 围绕中心旋转 CIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com