上篇讲到初始化.这篇是拍照. 首先定义变量
//可以理解为设备
GPUImageStillCamera* imageCamera;
//filter滤镜
GPUImageFilter* filter;
//显示出来的view
GPUImageView* iv;
复制代码
这里要讲一下GPUImageStillCamera
GPUImageStillCamera
继承关系如下: GPUImageStillCamera->GPUImageVideoCamera->GPUImageOutput
可以看到GPUImageStillCamera
继承自GPUImageVideoCamera
,所以他就拥有了录像的功能.既可以拍照.又可以录像.
三个变量的链接关系如下: GPUImageStillCamera->GPUImageFilter->GPUImageView
这样,摄像机转到滤镜再转到view上显示出来.
定义如下:
imageCamera=[[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1920x1080 cameraPosition:AVCaptureDevicePositionBack];
//AVCaptureDevicePositionBack为后摄像头 front为前置摄像头
//AVCaptureSessionPreset1920x1080为分辨率 另外还支持多种分辨率
//AVCaptureSessionPreset1280x720 等等等等
imageCamera.outputImageOrientation=UIInterfaceOrientationPortrait;
filter=[[GPUImageFilter alloc] init]; //默认滤镜.
/*官方版本如下:
GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"CustomShader"];
这个CustomShader是自定义的滤镜文件.如果没有,那就使用默认滤镜
*/
[imageCamera addTarget:filter];
iv=[[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenSize.width, kScreenSize.width)];
iv.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;
/*显示模式分为三种
typedef NS_ENUM(NSUInteger, GPUImageFillModeType) {
kGPUImageFillModeStretch, // Stretch to fill the full view, which may distort the image outside of its normal aspect ratio
kGPUImageFillModePreserveAspectRatio, // Maintains the aspect ratio of the source image, adding bars of the specified background color
kGPUImageFillModePreserveAspectRatioAndFill // Maintains the aspect ratio of the source image, zooming in on its center to fill the view
};
*/
[filter addTarget:iv];
[self.view addSubview:iv];//将显示view加入父类
[imageCamera startCameraCapture];//开启摄像头
复制代码
拍照代码:
[imageCamera capturePhotoAsImageProcessedUpToFilter:testFilter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
if(error){
return;
}
//存入本地相册
UIImageWriteToSavedPhotosAlbum(processedImage, nil, nil, nil);
}];
复制代码
在结束的时候停止
[imageCamera stopCameraCapture];
复制代码
下一篇写录像.后面还有各滤镜的使用什么的.然后再放出demo.