博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将CMSampleBufferRef保存为图片
阅读量:5020 次
发布时间:2019-06-12

本文共 2319 字,大约阅读时间需要 7 分钟。

//转换图片- (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer {    // 为媒体数据设置一个CMSampleBuffer的Core Video图像缓存对象    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);    // 锁定pixel buffer的基地址    CVPixelBufferLockBaseAddress(imageBuffer, 0);        // 得到pixel buffer的基地址    void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);        // 得到pixel buffer的行字节数    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);    // 得到pixel buffer的宽和高    size_t width = CVPixelBufferGetWidth(imageBuffer);    size_t height = CVPixelBufferGetHeight(imageBuffer);        // 创建一个依赖于设备的RGB颜色空间    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();        // 用抽样缓存的数据创建一个位图格式的图形上下文(graphics context)对象    CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,                                                 bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);    // 根据这个位图context中的像素数据创建一个Quartz image对象    CGImageRef quartzImage = CGBitmapContextCreateImage(context);    // 解锁pixel buffer    CVPixelBufferUnlockBaseAddress(imageBuffer,0);        // 释放context和颜色空间    CGContextRelease(context);    CGColorSpaceRelease(colorSpace);        // 用Quartz image创建一个UIImage对象image    UIImage *image = [UIImage imageWithCGImage:quartzImage];        // 释放Quartz image对象    CGImageRelease(quartzImage);        return (image);}

保存图片

//保存图片- (void)saveImageToPhotos:(UIImage*)savedImage{    UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);}// 指定回调方法- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{    NSString *msg = nil ;    if(error != NULL){        msg = @"保存图片失败" ;    }else{        msg = @"保存图片成功" ;    }    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"保存图片结果提示"                                                    message:msg                                                   delegate:self                                          cancelButtonTitle:@"确定"                                          otherButtonTitles:nil];    [alert show];}

//调用示例               

UIImage *img=[self imageFromSampleBuffer:detectSampleBufferRef];

[self saveImageToPhotos:img];

转载于:https://www.cnblogs.com/Percy/p/6291301.html

你可能感兴趣的文章
linux 学习随笔-shell简单编写
查看>>
万维网
查看>>
CentOS中对ext4文件系统做磁盘配额
查看>>
Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
查看>>
I2C用户态驱动设计
查看>>
springboot 整合retry(重试机制)
查看>>
数据挖掘缺失值处理
查看>>
3060 抓住那头奶牛 USACO
查看>>
4946: [Noi2017]蔬菜
查看>>
【前端性能】浅谈域名发散与域名收敛
查看>>
关于read函数的一些分析
查看>>
SpringBoot常用配置简介
查看>>
采用EasyDSS视频点播服务器搭建企业私有化的音视频多媒体、短视频、视频服务网站与管理后台...
查看>>
JQuery输入框获取/失去焦点行为
查看>>
js(二) 实现省市联动(json)
查看>>
snprintf 使用注意
查看>>
oracle表空间扩容
查看>>
关于IPicture::Render函数
查看>>
ElasticSearch(十一):Spring Data ElasticSearch 的使用(一)
查看>>
JS数组对象的方法
查看>>