GPUImage提供了GPUImageVideoCamera這麼一個類,它的對象可以調用攝像頭,而且加上濾鏡的效果。ide
//init VideoCameraspa
//這裏的兩個參數能夠設定拍攝錄像的像素,還有拍攝錄像的先後攝像頭。不過要注意的是先後攝像頭對像素的要求不一樣,1080P的錄像就不可能在錢攝像頭完成了哈3d
videoCamera = [[GPUImageVideoCameraalloc] initWithSessionPreset:AVCaptureSessionPreset640x480cameraPosition:AVCaptureDevicePositionBack];對象
//這個參數是肯定攝像的方向blog
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;接口
//開始攝像。這個方法能夠放在任意地方,只要運行了這個方法就開始攝像了get
[videoCamerastartCameraCapture];it
這些只是開始攝像的初始化工做,若是沒有圖像輸出那麼也是沒有用的哈(雖然StartCameraCapture的做用是開啓攝像頭,可是若是攝像頭上的圖像沒有傳遞到屏幕上那麼是沒有圖像的)io
//把濾鏡效果加給攝像頭class
[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.
}