#pragma mark - 裁剪CVPixelBufferRef -(CVPixelBufferRef)createBuffer:(CVPixelBufferRef)buffer rect:(CGRect)rect{ CVPixelBufferLockBaseAddress(buffer, 0); size_t num=CVPixelBufferGetPlaneCount(buffer); void * address[num]; size_t width[num]; size_t height[num]; size_t bytes[num]; for (size_t i = 0; i != num; i++) { address[i] = CVPixelBufferGetBaseAddressOfPlane(buffer, i); width[i] = CVPixelBufferGetWidthOfPlane(buffer, i); height[i] = CVPixelBufferGetHeightOfPlane(buffer, i); bytes[i] = CVPixelBufferGetBytesPerRowOfPlane(buffer, i); size_t startpos = rect.origin.y * bytes[i] + rect.origin.x * (bytes[i] / width[i]); address[i] = address[i] + startpos / (bytes[i] / width[i]); } CVPixelBufferRef re = NULL; CVPixelBufferCreateWithPlanarBytes(kCFAllocatorDefault, rect.size.width, rect.size.height, CVPixelBufferGetPixelFormatType(buffer), NULL, CVPixelBufferGetDataSize(buffer), num, address, width, height, bytes, NULL, NULL, NULL, &re); CVPixelBufferUnlockBaseAddress(buffer, 0); return re; }
摘自:http://blog.sina.com.cn/s/blog_166944a2a0102xi79.html