1. 程式人生 > >用GPUImage開啟相機並且開啟濾鏡效果

用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.

}