GpuImage简单使用
声明变量
@interface **********
{
GPUImageVideoCamera *Camera;
GPUImageOutput *Filters;
GPUImageView *CameraShowView;
}
首先是Camera,一种是GPUImageStillCamera,另一个种为GPUImageVideoCamera.正如其命名,如果只是拍照使用前者.录制视频使用后者.
//init, 第一个参数分辨率 第二个参数,前后摄像头选择
Camera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
Camera.outputImageOrientation = UIInterfaceOrientationPortrait;
Camera.horizontallyMirrorFrontFacingCamera = NO;
Camera.horizontallyMirrorRearFacingCamera = NO;
其次camera获取视频(图片)后,加以滤镜也就是filter, filter可以叠加,也可以自定义(比如美颜).
//黑白滤镜
Filters = [GPUImageColorPackingFilter new];
//将将滤镜加至摄像头
[Camera addTarget:Filters];
最后输出处理后的视频或图片,这里可以可以直接输出至屏幕,也可以使用GPUImageMovieWriter,也就是录制了.
//用于显示视频的GPUImageView
CameraShowView = [[GPUImageView alloc] initWithFrame:CGRectMake(, ,self.view.frame.size.width,self.view.frame.size.width*1.25)];
[CameraShowView setInputRotation:kGPUImageFlipHorizonal atIndex:];
CameraShowView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
[self.view addSubview:CameraShowView];
//将视频输出到->CameraShowView
[Filters addTarget:CameraShowView];
当然也不要忘记启动
//视频启动
[Camera startCameraCapture];
其他
//前后摄像头切换
-(void)VideoPosition:(UIButton*)Button{ [Camera rotateCamera]; Button.selected = !Button.selected;
} //闪关灯
-(void)LightBtn:(UIButton*)Btn{ if (Camera.inputCamera.position == AVCaptureDevicePositionBack) { if (Btn.selected) { [Camera.inputCamera lockForConfiguration:nil];
[Camera.inputCamera setTorchMode:AVCaptureTorchModeOff];
[Camera.inputCamera unlockForConfiguration]; }else{ [Camera.inputCamera lockForConfiguration:nil];
[Camera.inputCamera setTorchMode:AVCaptureTorchModeOn];
[Camera.inputCamera unlockForConfiguration];
} Btn.selected = !Btn.selected; }else{ NSLog(@"当前使用前置摄像头,未能开启闪光灯"); } }
多滤镜叠加,
由于项目要求,视频在录制的时候,需要使用特殊的比例(1比1),而在GPUImageVideoCamera的默认配置里,并没有这个比例.
所以考虑到录制的过程中需要使用美颜的滤镜,所以需使用GPUImageFilterGroup.以下就是添加了一个裁剪的滤镜
//其实也就是filter替换成FilterGroup
_filterGroup = [[GPUImageFilterGroup alloc] init];
//这里可以添加多个不同滤镜
[self addGPUImageFilter:[[GPUImageCropFilter alloc] initWithCropRegion:CGRectMake(0.0, 0.0, 1.0,0.5625)]];
addGPUImageFilter
//添加滤镜
- (void)addGPUImageFilter:(GPUImageOutput<GPUImageInput> *)filter
{
[_filterGroup addFilter:filter]; GPUImageOutput<GPUImageInput> *newTerminalFilter = filter; NSInteger count = _filterGroup.filterCount; if (count == )
{
_filterGroup.initialFilters = @[newTerminalFilter];
_filterGroup.terminalFilter = newTerminalFilter; } else
{
GPUImageOutput<GPUImageInput> *terminalFilter = _filterGroup.terminalFilter;
NSArray *initialFilters = _filterGroup.initialFilters; [terminalFilter addTarget:newTerminalFilter]; _filterGroup.initialFilters = @[initialFilters[]];
_filterGroup.terminalFilter = newTerminalFilter;
}
}
GpuImage简单使用的更多相关文章
- GPUImage简单滤镜使用(二)
GPUImage中,提供了许多简单的的常用的滤镜.在上一篇文章讲了如何调节图像的亮度这片文章讲一下如何通过GPUImage调节图像的对比度,饱和度,曝光度,和白平衡(美图秀秀中的色温). 原图像 调整 ...
- GPUImage简单滤镜使用(一)
今天来学习一下一个简单滤镜使用的流程,通过调节亮度滤镜来了解.先将GPUImage库导入到项目中,引入头文件"GPUImage.h" 一.创建亮度滤镜对象 GPUImag ...
- GPUImage简单滤镜使用之色阶(三)
色阶是表示图像亮度强弱的指数标准,图像的色彩丰满度和精细度是由色阶决定的.在GPUImage中GPUImageLevelsFilter提供了此功能. GPUImageLevelsFilter定义了修改 ...
- 图像处理库GPUImage简单使用
一.介绍 GPUImage是一个基于OpenGL ES 2.0的开源的图像处理库,作者是Brad Larson.GPUImage将OpenGL ES封装为简洁的Objective-C或Swift接口, ...
- 关于开源框架GPUImage 的简单说明
GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图片. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ...
- GPUImage的简单使用
GPUImage 是一个开源的图像处理库,提供了非常多的滤镜效果来加工图片.GPUImage 并不像一般的第三方库可以直接拖入到工程中使用,而是需要先在本地编译,然后将编译后的文件拖入到工程中使用.配 ...
- 基于GPUImage的多滤镜rtmp直播推流
之前做过开源videocore的推流改进:1)加入了美颜滤镜; 2) 加入了librtmp替换原来过于简单的rtmpclient: 后来听朋友说,在videocore上面进行opengl修改,加入新的 ...
- GPUImage实现摄像头暂停
GPUImage相信很多开发者都用过,其本身也是十分简单易用,因此对于GPUImage的基本用法不再赘述. 最近在使用GPUImage时要实现摄像时暂停和继续的功能,但GPUImage本身并没有提供相 ...
- GPUImage相关(转)
3.滤镜 除了上面提到的美颜和水印之外,视频中还有很多其它的处理效果也在这个环节完成.七牛直播云提供的 SDK 在开放性设计基础之上,通过数据源回调接口,可以支持各种自定义滤镜的接入. 为了实现丰富的 ...
随机推荐
- [LeetCode] Remove Duplicates from Sorted Array II 有序数组中去除重复项之二
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...
- 【C#】toString("Format") 格式化
1..ToString("P");//得到小数点后2位的百分比,自动 加上%号;//9512.35% 这个比较厉害! furenjun yoolonet
- 我要成为前端工程师!给 JavaScript 新手的建议与学习资源整理
来源于:http://blog.miniasp.com/post/2016/02/02/JavaScript-novice-advice-and-learning-resources.aspx 今年有 ...
- 页面局部跳转(iframe)
<script type="text/javascript"> function show() { document.getElementById("ff&q ...
- 【BZOJ-2555】SubString 后缀自动机 + LinkCutTree
2555: SubString Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1936 Solved: 551[Submit][Status][Di ...
- bzoj 1711 [Usaco2007 Open]Dining吃饭&&poj 3281 Dining
最大流. 这东西好像叫三分图匹配. 源点向每个食物点连一条容量为1的边. 每个饮料点向汇点连一条容量为1的边. 将每个牛点拆点,食物点向喜欢它的牛的入点连一条容量为1的边,牛的出点向它喜欢的饮料点连一 ...
- supervisor的使用:
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #e4af0a } sp ...
- Slave I/O: Got fatal error 1236
[起因] 一次zabbix报警,从库[Warning] MySQL-repl was down # 不知道主库/storage空间小于20%时为什么没有触发trigger [从库错误日志] 1611 ...
- maven引入多个spring jar包中存在同名文件的问题
项目打包后执行报错:Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespaceht ...
- linux的用户与用户组
1.上面这个花花绿绿的图片,来自linxu 下etc/passwd文件. 我们来详细的看下这些都值得是什么东西,这些内容都是用冒号来分割的. 2.etc/shadow 3.对比一下这两个文件的权限,为 ...