非常感谢您的帮助!
以下是我用来获取 CVImageBuffer 的大小和干净矩形以及基于 CVImageBuffer 的 CVOpenGLESTexture 的干净纹理坐标的代码。 CVImageBuffer 是从在 IOS7 上运行的 iPhone5 摄像头抓取的。
`CVImageBufferRef cameraFrame = CMSampleBufferGetImageBuffer(sampleBuffer);
err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, coreVideoTextureCache, cameraFrame, NULL, GL_TEXTURE_2D, GL_LUMINANCE, bufferWidth, bufferHeight, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, &luminanceTextureRef);
NSLog(@"Clean Rect: %@", NSStringFromCGRect(cleanRect));
NSLog(@"Nominal Output Display Size: %@", NSStringFromCGSize(nominalOutputDisplaySize));
NSLog(@"Encoded full Size: %@", NSStringFromCGSize(encodedSize));
NSLog(@"Lower left coordinate: %f, %f", lowerLeft[0], lowerLeft[1]);
NSLog(@"Lower right coordinate: %f, %f", lowerRight[0], lowerRight[1]);
NSLog(@"Upper right coordinate: %f, %f", upperRight[0], upperRight[1]);
NSLog(@"Upper left coordinate: %f, %f", upperLeft[0], upperLeft[1]);`
`The out put is as following:
Clean Rect: {{0, 0}, {640, 480}}
Nominal Output Display Size: {640, 480}
Encoded full Size: {640, 480}
Lower left coordinate: 0.000000, 1.000000
Lower right coordinate: 1.000000, 1.000000
Upper right coordinate: 1.000000, 0.000000
Upper left coordinate: 0.000000, 0.000000`
这里的输出不是很清楚,因为编码的完整尺寸与标称输出显示尺寸相同。我觉得干净的纹理坐标可以用来从完整的编码图像缓冲区中裁剪像素。