AVCapturePhotoOutput没有返回正确的图像

问题描述 投票:0回答:1

我在应用程序中的要求是捕获图像而不预览UIImagePickerController所以我使用以下代码捕获图像而不呈现相同的图像。

- (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;
    }
}

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

请您查看代码并用此更正我吗?

objective-c avfoundation avcapturedevice
1个回答
0
投票

我从Apple Developer的网站上找到了以下示例代码:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.