用GPUImage開啟相機並且開啟濾鏡效果
GPUImage提供了GPUImageVideoCamera這麼一個類,它的物件能夠呼叫攝像頭,並且加上濾鏡的效果。
//init VideoCamera
//這裡的兩個引數可以設定拍攝錄影的畫素,還有拍攝錄影的前後攝像頭。不過要注意的是前後攝像頭對畫素的要求不同,1080P的錄影就不可能在錢攝像頭完成了哈
videoCamera = [[GPUImageVideoCameraalloc] initWithSessionPreset:AVCaptureSessionPreset640x480cameraPosition:AVCaptureDevicePositionBack];
//這個引數是確定攝像的方向
videoCamera.
//開始攝像。這個方法可以放在任意地方,只要運行了這個方法就開始攝像了
[videoCamerastartCameraCapture];
這些只是開始攝像的初始化工作,如果沒有影象輸出那麼也是沒有用的哈(雖然StartCameraCapture的作用是開啟攝像頭,但是如果攝像頭上的影象沒有傳遞到螢幕上那麼是沒有影象的)
//把濾鏡效果加給攝像頭
[videoCameraaddTarget:testFilter];
//把攝像頭上的影象給GPUImageView顯示出來
[
在這裡的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.
}