我正在使用captureStillImageAsynchronouslyFromConnection:从相机获取图像样本缓冲区。之后,我通过OpenGL(GPU)运行图像来应用滤镜,但不幸的是,苹果公司的某个人已将相机放在iPhone 4上,其输出大于最大纹理尺寸。
Brad Larsons解释:iPhone 4是一个特殊情况,因为它可以拍摄足够大的照片(2592x1936),它们只会超过这些设备上GPU的最大纹理尺寸(2048x2048)。这导致当前处理失败。所有其他设备要么不拍大照片,要么支持更大的纹理尺寸(iPad 2,iPad 3和iPhone 4S支持这些更大的尺寸)。
所以我的代码是缩小图像,但是我必须在iPhone 4上调整大小后才创建CMSampleBufferRef以欺骗捕获过程...任何人都知道如何从CIImage获取CMSampleBufferRef?
Objective-C
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:CMSampleBufferGetImageBuffer(sampleBuffer)
options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNull null], kCIImageColorSpace, nil]];
ciImage = [[ciImage imageByApplyingTransform:myScaleTransform] imageByCroppingToRect:myRect];