声明变量

@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简单使用的更多相关文章

  1. GPUImage简单滤镜使用(二)

    GPUImage中,提供了许多简单的的常用的滤镜.在上一篇文章讲了如何调节图像的亮度这片文章讲一下如何通过GPUImage调节图像的对比度,饱和度,曝光度,和白平衡(美图秀秀中的色温). 原图像 调整 ...

  2. GPUImage简单滤镜使用(一)

    今天来学习一下一个简单滤镜使用的流程,通过调节亮度滤镜来了解.先将GPUImage库导入到项目中,引入头文件"GPUImage.h"   一.创建亮度滤镜对象    GPUImag ...

  3. GPUImage简单滤镜使用之色阶(三)

    色阶是表示图像亮度强弱的指数标准,图像的色彩丰满度和精细度是由色阶决定的.在GPUImage中GPUImageLevelsFilter提供了此功能. GPUImageLevelsFilter定义了修改 ...

  4. 图像处理库GPUImage简单使用

    一.介绍 GPUImage是一个基于OpenGL ES 2.0的开源的图像处理库,作者是Brad Larson.GPUImage将OpenGL ES封装为简洁的Objective-C或Swift接口, ...

  5. 关于开源框架GPUImage 的简单说明

    GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图片. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ...

  6. GPUImage的简单使用

    GPUImage 是一个开源的图像处理库,提供了非常多的滤镜效果来加工图片.GPUImage 并不像一般的第三方库可以直接拖入到工程中使用,而是需要先在本地编译,然后将编译后的文件拖入到工程中使用.配 ...

  7. 基于GPUImage的多滤镜rtmp直播推流

    之前做过开源videocore的推流改进:1)加入了美颜滤镜; 2) 加入了librtmp替换原来过于简单的rtmpclient: 后来听朋友说,在videocore上面进行opengl修改,加入新的 ...

  8. GPUImage实现摄像头暂停

    GPUImage相信很多开发者都用过,其本身也是十分简单易用,因此对于GPUImage的基本用法不再赘述. 最近在使用GPUImage时要实现摄像时暂停和继续的功能,但GPUImage本身并没有提供相 ...

  9. GPUImage相关(转)

    3.滤镜 除了上面提到的美颜和水印之外,视频中还有很多其它的处理效果也在这个环节完成.七牛直播云提供的 SDK 在开放性设计基础之上,通过数据源回调接口,可以支持各种自定义滤镜的接入. 为了实现丰富的 ...

随机推荐

  1. [LeetCode] Paint Fence 粉刷篱笆

    There is a fence with n posts, each post can be painted with one of the k colors. You have to paint ...

  2. [LeetCode] Meeting Rooms 会议室

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  3. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  4. Linux之sar命令介绍

    sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...

  5. ajax 多级联动 下拉框 Demo

    写了ajax实现级联下拉框,考虑常用,并且级联个数随不同业务个数不同,于是就整理了一下,实现了 ajax + N级联动 下拉框的效果 效果图 HTML 代码 <h2> 省级联动</h ...

  6. Kinect2.0 for Mac开箱

    前段时间从米国带回来一个Kinect,坑爹地发现需要适配器才能连接电脑.于是又从微软官网下单了适配器.今天终于在Mac上把Kinect装起来跑了,与大家分享一点图片. Kinect驱动安装 Kinec ...

  7. 使用DataTable更新数据库

    简例: string connStr = string.Format("Driver={1}Microsoft Access Driver (*.mdb){2};DBQ={0};" ...

  8. input type="datetime-local" 时placeholder不显示

    一个坑,input的type="datetime-local" 时,电脑上会显示提示,如图 <input type="datetime-local" na ...

  9. windows使用git时出现:warning: LF will be replaced by CRLF

    windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示: 执行以下代码 $ rm -rf .git // 删除.git $ git config -- ...

  10. Beta阶段第七次Scrum Meeting

    Beta阶段第七次Scrum Meeting 情况简述 BETA阶段第七次Scrum Meeting 敏捷开发起始时间 2016/12/20 00:00 敏捷开发终止时间 2016/12/21 00: ...