用GPUImage开启相机并且开启滤镜效果
GPUImage提供了GPUImageVideoCamera这么一个类,它的对象能够调用摄像头,并且加上滤镜的效果。
//init VideoCamera
//这里的两个参数可以设定拍摄录像的像素,还有拍摄录像的前后摄像头。不过要注意的是前后摄像头对像素的要求不同,1080P的录像就不可能在钱摄像头完成了哈
videoCamera = [[GPUImageVideoCameraalloc] initWithSessionPreset:AVCaptureSessionPreset640x480cameraPosition:AVCaptureDevicePositionBack];
//这个参数是确定摄像的方向
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
//开始摄像。这个方法可以放在任意地方,只要运行了这个方法就开始摄像了
[videoCamerastartCameraCapture];
这些只是开始摄像的初始化工作,如果没有图像输出那么也是没有用的哈(虽然StartCameraCapture的作用是开启摄像头,但是如果摄像头上的图像没有传递到屏幕上那么是没有图像的)
//把滤镜效果加给摄像头
[videoCameraaddTarget:testFilter];
//把摄像头上的图像给GPUImageView显示出来
[testFilteraddTarget:imageView];
在这里的TestFilter已经是初始化过了的滤镜效果。
这样就可以成功摄像了
//关闭摄像头
[videoCamerastopCameraCapture];
关闭摄像头也很简单,就不多说了哈
还有一个最重要的地方,开启摄像头需要完成以下接口才能正常运行:
#pragma mark - vidoe camera
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
// Map UIDeviceOrientation to UIInterfaceOrientation.
UIInterfaceOrientation orient = UIInterfaceOrientationPortrait;
switch ([[UIDevicecurrentDevice] orientation])
{
caseUIDeviceOrientationLandscapeLeft:
orient = UIInterfaceOrientationLandscapeLeft;
break;
caseUIDeviceOrientationLandscapeRight:
orient = UIInterfaceOrientationLandscapeRight;
break;
caseUIDeviceOrientationPortrait:
orient = UIInterfaceOrientationPortrait;
break;
caseUIDeviceOrientationPortraitUpsideDown:
orient = UIInterfaceOrientationPortraitUpsideDown;
break;
caseUIDeviceOrientationFaceUp:
caseUIDeviceOrientationFaceDown:
caseUIDeviceOrientationUnknown:
// When in doubt, stay the same.
orient = fromInterfaceOrientation;
break;
}
videoCamera.outputImageOrientation = orient;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
returnYES; // Support all orientations.
}
用GPUImage开启相机并且开启滤镜效果的更多相关文章
- Android开启相机预览获取Yuv视频流数据
自定义SurfaceView 主要步骤: 实现SurfaceHolder.Callback接口,创建SurfaceView的生命周期 实现Camera.PreviewCallback接口,创建预览回调 ...
- linux下查看php-fpm是否开启以及如何开启
对于linux接触很少,对于命令很不熟,今天发现之前部署的站点无法访问了,就想可能是nginx或者php-fpm没有开启. 所以这里记录linux下查看php-fpm是否开启以及如何开启(nginx也 ...
- Android 7.0 之后相机/文件读写等权限获取方式改变,导致开启相机闪退
在 Android 7.0 之前 Google 提供的动态申请权限的 API,可以调用相机拍照,访问SDcard等操作都只需要申请对应的权限,如下: <uses-permission andro ...
- ios7.1后setting中没有开启相机服务应用程序相机预览黑屏问题
if ( [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){ ...
- shopnc怎么开启伪静态 shopnc开启伪静态的方法
最近要给一个shopnc网站开启伪静态,用的是shopnc b2b2c,在网上搜索了好多shopnc开启伪静态的方法,但都是针对shaopnc c2c的,没有关于shopnc b2b2c的,最后终于找 ...
- ios简单实现如果没有开启定位,提示开启系统软件定位功能
if([CLLocationManager locationServicesEnabled] && [CLLocationManager authorizationStatus] == ...
- macOS apache配置及开启虚拟服务器的开启,apache开启重写模式
今天把自己的mac系统升到最新版,但是,apache却不能用了,因为mac上的apache是系统自带的,因为是mac目前的最新系统,所以出现了好多问题,整理了一下午也没有啥进展,最后还是把原来的在云盘 ...
- fedora 开启 apache 并 开启目录浏览模式
在内网中 暂时需要一台 文件 服务器,所以准备安装一台 http服务器并开启目录访问权限.这次使用 apache 在 fedora 28 机器上: 因为 fedora 28 已经包含 httpd 软件 ...
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
1. 概述 bindService() 绑定服务 可以得到服务的代理人对象,间接调用服务里面的方法. 绑定服务: 间接调用服务里面的方法. 如果调用者activity被销毁了, ...
随机推荐
- Android - 获取字符串长度的宽度
Paint paint = new Paint(); float strWidth = paint.measureText(String);
- 继续(3n+1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候, ...
- Tomcat启动后加载两次web.xml的问题(因为spring定时任务执行了俩次,引出此问题)
http://www.linuxidc.com/Linux/2011-07/38779.htmhttp://jingyan.baidu.com/article/48206aeaf9422e216ad6 ...
- boost::thread 线程锁
1.boost锁的概述: boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁. 2.mutex对象类(主要有两种): 1.boost::mutex(独占互斥类) --& ...
- Apache Virtual Include
2.目录支持includes: <Directory /> Options None //不支持includes ...
- MYSQL常用命令集合(转载)
文章出处:http://www.cnblogs.com/q1ng/p/4474501.html 1.导出整个数据库mysqldump -u 用户名 -p --default-character-set ...
- JS禁止横竖屏切换,强制横竖屏显示
js判断屏幕横竖屏: function orient() { //alert('gete'); if (window.orientation == 0 || window.orientation == ...
- mysql的字段类型范围必须重视起来
在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮 ...
- vscode编写插件详细过程
前言 之前编写了一个vscode插件用vscode写博客和发布,然后有园友要求写一篇来介绍如何开发一个vscode扩展插件,或者说介绍开发这个插件的过程.然而文章还没有写,园子里面已经有人发布一个文章 ...
- Use_Case
What is Use-Case 2.0?Use Case: A use case is all the ways of using a system to achieve a particular ...