假设您想实时执行此操作(而不是使用您明确表示不想要的屏幕截图):
您首先需要捕获Apple 在此处概述的视频缓冲区。
然后你可以用CMSampleBufferRef
. Apple 的示例应用程序会生成 a UIImage
,但您可以简单地将其复制到unsigned char
指针中(通过 aCVImageBufferRef
或CVPixelBufferRef
),然后提取相关像素的 BGRA 值,如下所示(未经测试的代码:示例适用于 100x,200y 的像素) :
int x = 100;
int y = 200;
CVPixelBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
tempAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
int bufferSize = bytesPerRow * height;
uint8_t *myPixelBuf = malloc(bufferSize);
memmove(myPixelBuf, tempAddress, bufferSize);
tempAddress = nil;
// remember it's BGRA data
int b = myPixelBuf[(x*4)+(y*bytesPerRow)];
int g = myPixelBuf[((x*4)+(y*bytesPerRow))+1];
int r = myPixelBuf[((x*4)+(y*bytesPerRow))+2];
free(myPixelBuf);
NSLog(@"r:%i g:%i b:%i",r,g,b);
这会获取相对于视频源本身的像素的位置,这可能不是您想要的:如果您希望像素的位置显示在 iPhone 的显示屏上,您可能需要对其进行缩放。