CIImage CGImage UIImage 区别

我看见有人说,“不知道苹果怎么想的,搞了这么多乱七八糟的图片格式,转换起来很麻烦”,然后把大量的精力放在了格式转换上,真是醉了。此处不写方法,谨写些区别。

CIImage 包含了创建图片的所有必要的数据,但其本身没有渲染成图片,它代表的是图像数据或者生成图像数据的流程(如滤镜);

CGImage是基于像素的矩阵,每个点都对应了图片中点的像素信息;

UIImage 管理图片数据,主要用来展现,如 UIImageView 中,控件中等,也可以用来直接在 view 或其他的 context 中绘制。

苹果搞这么多图片出来是方便程序员在图片生成的各个阶段对其进行操作,不是考验格式转化的 -_-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Swift中,获取当前帧可以使用AVFoundation库中的AVCaptureVideoDataOutput类来实现。以下是一个获取当前帧的函数示例: ```swift import AVFoundation func captureCurrentFrame() -> UIImage? { let captureSession = AVCaptureSession() captureSession.sessionPreset = AVCaptureSession.Preset.photo // 获取设备 guard let device = AVCaptureDevice.default(for: .video) else { return nil } // 添加输入 do { let input = try AVCaptureDeviceInput(device: device) if captureSession.canAddInput(input) { captureSession.addInput(input) } } catch { print(error.localizedDescription) return nil } // 添加输出 let output = AVCaptureVideoDataOutput() output.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue")) if captureSession.canAddOutput(output) { captureSession.addOutput(output) } // 启动会话 captureSession.startRunning() // 获取当前帧 if let connection = output.connection(with: .video), let sampleBuffer = output.copyNextSampleBuffer(), let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) { let ciImage = CIImage(cvPixelBuffer: imageBuffer) let context = CIContext(options: nil) let cgImage = context.createCGImage(ciImage, from: ciImage.extent) let uiImage = UIImage(cgImage: cgImage!) return uiImage } return nil } ``` 这个函数使用AVCaptureSession创建一个视频捕获会话,并配置了一个AVCaptureVideoDataOutput来获取视频数据。在获取到视频数据后,它将其转换为CIImage对象,并将其转换为UIImage对象以供使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值