【问题标题】:GPUImageStillCamera Output Resolution LimitedGPUImageStillCamera 输出分辨率受限
【发布时间】:2013-05-08 04:34:53
【问题描述】:

在装有 iOS 6.1 的 iPad 3 Retina 上,我初始化我的静态相机:

stillCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition:AVCaptureDevicePositionBack];
stillCamera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft;

我用这些滤镜设置了相机:

UIImage *inputImage = [UIImage imageNamed:@"blank-1x1.png"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture processImage];

chromaKeyBlendFilter = [[GPUImageChromaKeyBlendFilter alloc] init];
[chromaKeyBlendFilter setColorToReplaceRed:0.0 green:1.0 blue:0.0];
[chromaKeyBlendFilter setThresholdSensitivity:0.37f];
filter = chromaKeyBlendFilter;

[stillCamera addTarget:filter];
[sourcePicture addTarget:filter];

[filter addTarget:videoPreviewView]; // 1024x768 view
[stillCamera startCameraCapture];

当我捕捉我使用的图像时:

[stillCamera capturePhotoAsPNGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedPNG, NSError *error){
    self.currentImage = [UIImage imageWithData:processedPNG];
});

但我得到的图像是屏幕大小(Retina 风格)2048x1536,而不是我期望的后置摄像头为 2420x1936。我还注意到#imageFromCurrentlyProcessedOutputWithOrientation# 也只返回屏幕大小,并且查看 GPUImageStillCamera.m 中的捕获代码,它看起来好像是输出的来源。

我不知道为什么,因为我还有一个选项/按钮来使用非 GPUImage 设置,并且我得到了 2420x1936 的 PNG 图像。

我在这里做错了什么?感谢您提供任何提示(因为我真的想要 2420x1936)。

【问题讨论】:

    标签: ios ipad gpuimage


    【解决方案1】:

    首先,我的意思是 2592x1936 用于 iPad 后置摄像头全分辨率(我将图像裁剪为 8x10 尺寸)。事实证明,我试图变得太“聪明”。

    当我点击一个按钮来捕获图像时,我在后台线程中使用以下内容来获取在异步捕获时保存到属性中的图像(在本例中为高达 8mb 的 PNG 文件)

    [stillCamera capturePhotoAsPNGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedPNG, NSError *error)
    self.currentImage = [UIImage imageWithData:processedPNG];
    

    但是,在调度该队列后,我立即转到预览视图,并使用

    [filter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp]
    

    那是 2048x1516,足以显示在 iPad Retina 上进行预览。然后当预览被关闭时,self.currentImage 被裁剪并保存到一个文件(和 Core Data 元数据)中。

    我太“聪明”了,当我注意到预览显示时,我仍然收到来自相机的记录的 KVO 控制台消息。所以,在 viewWillDisappear 我放了一个“暂停相机”并重新出现“恢复相机”。显然,当暂停相机命令发出时,它会立即停止处理并将它所拥有的内容转储到我的 currentImage 属性中,如果预览可以再等几秒钟,那始终是 2048x1516 图像而不是全分辨率图像。

    恕我直言,当相机暂停时,任何后台捕获线程都应该继续直到完成,然后暂停相机。但我可以解决这个问题,我很高兴找到了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2017-11-03
      相关资源
      最近更新 更多