iOS 视图渲染数据转CVPixelBuffer

匿名 (未验证) 提交于 2019-12-02 23:55:01

void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);

- (CVPixelBufferRef)CVPixelBufferRef {          CGSize size = self.frame.size;     NSDictionary *options = @{(NSString*)kCVPixelBufferCGImageCompatibilityKey : @YES,                               (NSString*)kCVPixelBufferCGBitmapContextCompatibilityKey : @YES,                               (NSString*)kCVPixelBufferIOSurfacePropertiesKey: [NSDictionary dictionary]};     CVPixelBufferRef pxbuffer = NULL;          CGFloat frameWidth = size.width;     CGFloat frameHeight = size.height;          CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault,                                           frameWidth,                                           frameHeight,                                           kCVPixelFormatType_32ARGB,                                           (__bridge CFDictionaryRef) options,                                           &pxbuffer);          NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);          CVPixelBufferLockBaseAddress(pxbuffer, 0);     void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);     NSParameterAssert(pxdata != NULL);          CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();          CGContextRef context = CGBitmapContextCreate(pxdata, size.width, size.height, 8, CVPixelBufferGetBytesPerRow(pxbuffer), rgbColorSpace, kCGImageAlphaPremultipliedFirst);          NSParameterAssert(context);          CGContextConcatCTM(context, CGAffineTransformMakeRotation(0));     CGAffineTransform flipVertical = CGAffineTransformMake( 1, 0, 0, -1, 0, frameHeight);     CGContextConcatCTM(context, flipVertical);      //    CGAffineTransform flipHorizontal = CGAffineTransformMake( -1.0, 0.0, 0.0, 1.0, frameWidth, 0.0 ); //    CGContextConcatCTM(context, flipHorizontal);       [self.webView.layer renderInContext:context];          CGColorSpaceRelease(rgbColorSpace);     CGContextRelease(context);     CVPixelBufferUnlockBaseAddress(pxbuffer, 0);          return pxbuffer; }

 

 这或许不是最好的方法, 但目前确实解决了燃眉之急, 分享出来, 为有同样需求的小伙伴提供一条方案, 或者小伙伴有更好的方法, 分享出来, 大家可以学习交流一下

或者上我的简书

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!