当前位置: 首页 > 面试题库 >

使用自定义相机Swift 3拍照

郑宇
2023-03-14
问题内容

在Swift 2.3中,我使用以下代码在自定义相机中拍照:

 func didPressTakePhoto(){

        if let videoConnection = stillImageOutput!.connection(withMediaType: AVMediaTypeVideo) {

            stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: { (sampleBuffer, error) -> Void in
                if sampleBuffer != nil {
                    let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                    let dataProvider = CGDataProviderCreateWithCFData(imageData)
                    let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault)
                    let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)


                    self.captureImageView.image = image
                }
            })

    }
}

但是他的话:
stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: { (sampleBuffer, error) -> Void in

显示此错误:

类型“ AVCapturePhotoOutput”的值没有成员“
captureStillImageAsynchronouslyFromConnection”

我尝试解决问题,但是我总是收到越来越多的错误,所以这就是我发布原始代码的原因。

有人知道如何使我的代码再次起作用吗?

谢谢。


问题答案:

多亏了Sharpkits,我找到了解决方案(此代码对我有用):

func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {

        if let error = error {
            print(error.localizedDescription)
        }

        if let sampleBuffer = photoSampleBuffer, let previewBuffer = previewPhotoSampleBuffer,
            let dataImage = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: sampleBuffer, previewPhotoSampleBuffer: previewBuffer) {

            let imageData = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: sampleBuffer, previewPhotoSampleBuffer: nil)
            let dataProvider = CGDataProvider(data: imageData as! CFData)

            let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: CGColorRenderingIntent.absoluteColorimetric)


            let image = UIImage(cgImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.right)

            let cropedImage = self.cropToSquare(image: image)

            let newImage = self.scaleImageWith(cropedImage, and: CGSize(width: 600, height: 600))

            print(UIScreen.main.bounds.width)


            self.tempImageView.image = newImage
            self.tempImageView.isHidden = false


        } else {

        }
    }


 类似资料:
  • 我创建了自定义相机活动,但拍摄的图像方向错误。当我在纵向模式下拍摄图像并将其旋转90度后。它处于原始位置,但在横向模式下以错误方向拍摄图像。 相机方向在纵向模式下捕获图像时 用于解决相机预览问题。 检查位图方向。

  • uniapp 自定义相机进行连续拍照 1.使用live-pusher 在进行拍照的时候 snapshot提示未定义 2.video 和 canvas 但是视频流没有显示出来 video显示的圈 结果 自定义相机可以单拍也可以连续拍多张

  • 本文向大家介绍Android 用 camera2 API 自定义相机,包括了Android 用 camera2 API 自定义相机的使用技巧和注意事项,需要的朋友参考一下 前言 笔者因为项目需要自定义相机,所以了解了一下 Android 关于 camera 这块的 API。Android SDK 21(LOLLIPOP) 开始已经弃用了之前的 Camera 类,提供了 camera2 相关 API

  • 所以我遇到了一个问题,前面在我提问的问题中提到过:将图像(ACTION_image_CAPTURE)上载到Firebase存储 我对这个问题进行了更多的搜索,并应用了Android Studio文档:https://developer.android.com/training/camera/photobasics.html#TaskPhotoView 所以,在您阅读代码之前,我基本上想说一下需要什

  • 我已经阅读了几个文档和堆栈,但是我不太确定如何实现这个。。。 帮助或示例代码将真正帮助我理解更多。 下面是运行相机的代码集,它工作得非常好,我的下一个问题是,我如何让它自动保存到手机库中?

  • 本课的目标是整合Camera这样我们可以用他来拍照了,但是要达到这个目标需要下点功夫。 除了要出发相机拍照之外,我们还要: 将照片移动到手机上的持久储存 在模板中展示这些照片 显示其他的照片 允许删除照片 这样看来本课程还是蛮大的。在本应用的开始部分我们设置了Ionic Native,也就是基础部分里面的内容,Ionic Native是Ionic包装好的Cordova插件,使用更简单。 本课程中将