首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPUImageStillCamera输出分辨率有限公司

GPUImageStillCamera输出分辨率有限公司
EN

Stack Overflow用户
提问于 2013-05-05 19:52:19
回答 1查看 1.1K关注 0票数 3

在带有iPad 3 Retina的iOS 6.1上,我用以下方法初始化静止相机:

代码语言:javascript
复制
stillCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition:AVCaptureDevicePositionBack];
stillCamera.outputImageOrientation = UIInterfaceOrientationLandscapeLeft;

我用这些滤镜安装了摄像机:

代码语言:javascript
复制
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];

当我捕捉到图像时,我用:

代码语言:javascript
复制
[stillCamera capturePhotoAsPNGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedPNG, NSError *error){
    self.currentImage = [UIImage imageWithData:processedPNG];
});

但是我得到的图像是屏幕大小的(Retina样式) 2048x1536,而不是我期望的后部相机2420x1936。我还注意到,#imageFromCurrentlyProcessedOutputWithOrientation#也只返回屏幕大小,并且查看GPUImageStilCamera.m中的捕获代码,它看起来就像是输出的发源地。

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

我在这里做错什么了?谢谢你的建议(因为我真的想要2420x1936)。

EN

回答 1

Stack Overflow用户

发布于 2013-05-07 20:34:53

首先,我的意思是2592x1936用于iPad背相机的全分辨率(我将图像裁剪为8x10大小)。事实证明,我试图变得过于“聪明”。

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

代码语言:javascript
复制
[stillCamera capturePhotoAsPNGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedPNG, NSError *error)
self.currentImage = [UIImage imageWithData:processedPNG];

但是,在调度队列之后,我立即切换到一个预览视图,在该预览视图中,我使用

代码语言:javascript
复制
[filter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp]

这是2048x1516,足以显示在iPad Retina上进行预览。然后,当该预览被取消时,self.currentImage被裁剪并保存到一个文件(以及核心数据元数据)中。

在我变得“聪明”的地方,当我注意到预览显示的时候,我仍然会从摄像机中得到记录KVO控制台的信息。因此,在viewWillDisappear中,我插入了一个“暂停摄像机”,并在重新出现“恢复摄像机”时。显然,当发出暂停摄像机命令时,它会立即停止处理并将其所拥有的内容转储到我的currentImage属性中,如果预览可以再等几秒钟的话,那总是一个2048x1516图像,而不是全res图像。

IMHO,当摄像机暂停时,任何背景捕获线程都应该继续,直到完成,然后暂停相机。但我可以处理这件事,我很高兴我发现了这个问题。

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

https://stackoverflow.com/questions/16388484

复制
相关文章

相似问题

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