首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCapturePhotoOutput未返回正确的图像

AVCapturePhotoOutput未返回正确的图像
EN

Stack Overflow用户
提问于 2017-12-26 15:02:25
回答 1查看 358关注 0票数 0

我在应用程序中的要求是在不预览UIImagePickerController的情况下捕获图像,因此我使用了以下代码来捕获图像而不呈现相同的图像。

代码语言:javascript
复制
- (void)clickImage
{
    AVCaptureDevice *rearCamera = [self checkIfRearCameraAvailable];

    if (rearCamera != nil)
    {
        photoSession = [[AVCaptureSession alloc] init];

        NSError *error;
        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:rearCamera error:&error];

        if (!error && [photoSession canAddInput:input])
        {
            [photoSession addInput:input];

            AVCapturePhotoOutput *output = [[AVCapturePhotoOutput alloc] init];


            if ([photoSession canAddOutput:output])
            {
                [photoSession addOutput:output];

                AVCaptureConnection *videoConnection = nil;

                for (AVCaptureConnection *connection in output.connections)
                {
                    for (AVCaptureInputPort *port in [connection inputPorts])
                    {
                        if ([[port mediaType] isEqual:AVMediaTypeVideo])
                        {
                            videoConnection = connection;
                            break;
                        }
                    }
                    if (videoConnection)
                    {
                        break;
                    }
                }

                if (videoConnection)
                {
                    [photoSession startRunning];

                    [output capturePhotoWithSettings:[AVCapturePhotoSettings photoSettings] delegate:self];
                }
            }
        }
    }
}

- (AVCaptureDevice *)checkIfRearCameraAvailable
{
    AVCaptureDevice *rearCamera;

    AVCaptureDeviceDiscoverySession *captureDeviceDiscoverySession =
    [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera]
                                                           mediaType:AVMediaTypeVideo
                                                            position:AVCaptureDevicePositionBack];

    NSArray *allCameras = [captureDeviceDiscoverySession devices];


    for (int i = 0; i < allCameras.count; i++)
    {
        AVCaptureDevice *camera = [allCameras objectAtIndex:i];

        if (camera.position == AVCaptureDevicePositionBack)
        {
            rearCamera = camera;
        }
    }

    return rearCamera;
}

- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhotoSampleBuffer:(CMSampleBufferRef)photoSampleBuffer previewPhotoSampleBuffer:(CMSampleBufferRef)previewPhotoSampleBuffer resolvedSettings:(AVCaptureResolvedPhotoSettings *)resolvedSettings bracketSettings:(AVCaptureBracketedStillImageSettings *)bracketSettings error:(NSError *)error
{
    if (error)
    {
        NSLog(@"error : %@", error.localizedDescription);
    }

    if (photoSampleBuffer)
    {
        NSData *data = [AVCapturePhotoOutput JPEGPhotoDataRepresentationForJPEGSampleBuffer:photoSampleBuffer
                                                                   previewPhotoSampleBuffer:previewPhotoSampleBuffer];
        UIImage *image = [UIImage imageWithData:data];

        _imgView.image = image;
    }
}

我已经使用上面的代码来捕获图像,但输出的图像正在返回,看起来像是在夜间模式或负片图像。

你能检查一下代码并纠正我的错误吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-28 12:55:07

我在Apple开发人员网站上找到了以下示例代码:

https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010112

上面的示例代码有助于获得正确的图像。我也添加了这个答案,以寻求他人的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47975044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档