iOS 5 取景器和实时滤镜的制作
来源:互联网 发布:淘宝网查看我的购物车 编辑:程序博客网 时间:2024/05/19 13:18
1.使用UIImagePickerController捕捉媒体制作取景器
UIImagePickerController是一个UINavigationController的子类,他是UIKit的一部分,因此不需要添加额外的框架,使用很简单,但却功能强大。我们可以使用它选择来源媒体的类型,UIImagePicker有三种媒体来源可供选择:UIImagePickerControllerSourceTypePhotoLibrary(系统的照片库选择照片),UIImagePickerControllerSourceTypeSavedPhotosAlbum(只能在保存的相册中选择照片),UIImagePickerControllerSourceTypeTypeCamera(使用摄像头来获取图片或视频)。因此我们既可以从本地获取图片,也可以调用摄像头来捕捉新媒体,当我们选择了捕捉的媒体时它就会调用它代理的didFinishPickingMediaWithInfo:方法。UIImagePickerControllerSourceType还允许开发者提供一个视图,叠加在预览视图上面,因此我们可以通过自定义一个视图来制作一个漂亮的取景器。
取景器制作步骤:1创建一个UIImagePickerController,使用摄像头作为来源;2 必须在显示图像选取器之前,加上一个让用户拍照的方法;3简历一个Uiview作为叠加层,你可以像对待任何其他UIView一样来处理这个叠加层,你可以加上动画,加上任意的子视图等等。下面的代码演示了一个简单的取景器。
-(void)showCustomCamera{ //创建UIImagePickerController picker=[[UIImagePickerController alloc]init]; picker.sourceType=UIImagePickerControllerSourceTypeCamera;//选取摄像头作为来源 [picker setDelegate:self]; picker.cameraDevice=UIImagePickerControllerCameraDeviceFront;//强制选取前置摄像头; picker.showsCameraControls=NO;//禁用摄像头空件 //创建叠加层 UIView *overLayView=[[UIView alloc]initWithFrame:self.view.bounds]; //取景器的背景图片,该图片中间挖掉了一块变成透明,用来显示摄像头获取的图片; UIImage *overLayImag=[UIImage imageNamed:@"overLay.png"]; UIImageView *bgImageView=[[UIImageView alloc]initWithImage:overLayImag]; [overLayView addSubview:bgImageView]; //在叠加视图上自定义一个拍照按钮 UIButton *takePhotoBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [takePhotoBtn setFrame:CGRectMake(74, 370, 178, 37)]; [takePhotoBtn addTarget:self action:@selector(takePhoto:) forControlEvents:UIControlEventTouchUpInside]; [overLayView addSubview:takePhotoBtn]; //将视图设置为摄像头的叠加层 picker.cameraOverlayView=overLayView; //显示选取器 [self presentModalViewController:picker animated:YES];}-(void)takePhoto:(id)sender{ [picker takePicture];//他将会自动调用代理方法完成照片的拍摄;}
2.使用AV Foundation框架来实现实时滤镜
UIImagePickerController处理的并不是原始摄像头数据,他是在原始数据被处理成图像后才开始访问。而AV Foundation能在原始数据变成图像之前就直接访问它,这就使得我们能够执行一些额外的暗箱操作,来实现实时滤镜的制作。
AVCaptureSession用来控制输入设备(AVCaptureDeviceInput)视频图像到流入输出缓冲区(AVCaptureOutput)的过程。一旦AVCaptureSession启动以后,就会收集来自输入设备的信息,并在适当的时候将这些信息输出到数据缓冲区中。
AVCaptureVideoPreviewLayer默认情况下会显示来自输入设备的原始数据,如果要实现实时滤镜或在这个图层上绘制额外的物体,那么就要冲视频输出缓冲区获取数据帧数据,并对其进行处理,处理完毕后可将像素数据输出到另一个图层或者OpenGL上下文中。
AVCaptureConnection是一个类,用来在AVCaptureInput和AVCaptureOutput之间建立连接。AVCaptureSession必须从AVCaptureConnection中获取实际数据。
相机实时效果制作过程:创建一个新的AVCaptureSession;设置对图像质量的预置值;通过AVCaptureDevice来创建必要的输入捕捉设备如摄像头;通过AVCaptureStillImageOutput或者AVCaptureVideoDataOutput来添加一个输出缓冲区;建立AVCaptureVideoPreviewLayer(预览图层),并将他添加到视图控制器相关联的视图中,成为子视图;启动AVCaptureSession;获取一个AVCaptureConnection的引用,该链接位于AVCaptureInput和AVCaptureVideoDataOutput之间;从AVCaptureVideoDataOutput中抓取单独帧的数据,然后将其显示在自己定制的预览图层中。
总结:
UIImagePickerController可以用于进行简单的媒体捕捉,通过设置属性sourceType和captureMode可以对UIImagePickerController进行简单的配置,让他以不同的分辨率捕捉静止图像或者视频。
AVFoundation可以用来创建我们自己定制的捕捉解决方案,我们可以在帧数据刚刚从设备上捕捉到时就访问这些数据,而不用等到图像数据被最终确定之后,这就给我们提供相机实时效果以及其他的滤镜操作。
- iOS 5 取景器和实时滤镜的制作
- iOS 5 取景器和实时滤镜的制作
- 取景器和实时滤镜的制作
- iOS 5 取景器和实时滤镜的制作(AVCaptureSession 讲解的很不错感觉)
- ios取景器
- iOS 实时滤镜 AVCapture Filter
- 模仿Flickr 使用GPUImage的实时相机滤镜(iOS源代码)
- iOS实时滤镜实现--基于GPUImage。
- iOS 基于ColorMatrix制作简单滤镜
- android实时滤镜的效率问题
- 基于GPUImage的实时美颜滤镜
- 基于GPUImage的实时美颜滤镜
- 基于GPUImage的实时美颜滤镜
- 基于GPUImage的实时美颜滤镜
- 使用iOS原生框架实现实时滤镜效果
- Android、iOS 源码解析,实时滤镜处理等
- iOS GPUImage研究三:视频采集并添加实时滤镜
- 使用GPUImage 实现利用GPU来实习滤镜(实时滤镜 和iphone手机一样)
- win8开发(17)——自己也来做一做弹出对话框
- Prevent Putty session from going inactive
- Hadoop学习笔记
- 黑马程序员_交通灯管理系统
- hibernate4之原理浅析
- iOS 5 取景器和实时滤镜的制作
- Makefile中添加宏定义
- CtrlList判断点击的是否为CheckBox
- 即时通讯开发的现状与选择
- 完全卸载oracle11g数据库
- This application requires a java runtime Environment 1.3.0 droiddraw
- 重提异常(JAVA的异常处理原则与存在的问题)
- 数据库表转换为实体类
- Linux Shell编程入门