1

使用 GPUImage 相机,我像这样设置我的相机

- (void)setupSessionWithImageView:(GPUImageView *)captureView
{
    GPUImageStillCamera *stillCamera = [[GPUImageStillCamera alloc] init];
    GPUImageGammaFilter *colorFilter = [[GPUImageGammaFilter alloc] init];
    [stillCamera addTarget:colorFilter];
    [colorFilter addTarget:captureView];

    self.colorFilter = colorFilter;
    self.stillCamera = stillCamera;
    self.captureView = captureView;

    [stillCamera startCameraCapture];
}

为了viewWillTransitionToSize:在我的视图控制器上调用时模仿 Apple 的 iPad 相机,我更新outputImageOrientation了静态相机上的。这会旋转视频预览,以便在 iPad 的方向改变时保持正确的方向。

- (void)setOrientation:(UIInterfaceOrientation)interfaceOrientation
{
        if (interfaceOrientation == UIInterfaceOrientationUnknown) { // default to portrait if we don't know
            interfaceOrientation = UIInterfaceOrientationPortrait;
        }

    self.stillCamera.outputImageOrientation = interfaceOrientation;
}

我的问题是,当我使用 iOS 9 使用此设置拍摄照片时,所有横向图像都会报告它们的大小,就好像它们是纵向图像一样(因此短边是宽度的测量值,长边是高度的测量值),但是它们正确地报告了它们的方向。iOS 9 指南中的新增功能并未表明对 AVFoundation 的任何更改,听起来它们可能会影响这一点。保留outputImageOrientationas Portrait 解决了这个问题,但阻止我通过旋转视图来模仿 iPad 上的 Apple 原生相机功能。

- (void)captureImage
{
    GPUImageStillCamera *stillCamera = self.stillCamera;

    [stillCamera capturePhotoAsImageProcessedUpToFilter:self.colorFilter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
        NSLog(@"image orientation %ld", (long)processedImage.imageOrientation);
        NSLog(@"image size %f width x %f height", processedImage.size.width, processedImage.size.height);

    }];
}

我的 GPUImage 实现和/或我如何处理相机中的方向变化是否存在问题?整个示例项目可以在我的 git 页面上找到。在 iOS 8 和图像报告尺寸之前,准确地反映了它的方向属性。

4

0 回答 0