【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻_第1頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻_第2頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻_第3頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻_第4頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻

怎么在iOS中自定義相機(jī)實(shí)現(xiàn)拍照、錄制視頻?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面在下將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。首先聲明以下對(duì)象:#import

"CustomeCameraViewController.h"

#import

<AVFoundation/AVFoundation.h>

#import

<AssetsLibrary/AssetsLibrary.h>

@interface

CustomeCameraViewController

()<AVCaptureFileOutputRecordingDelegate>

{

//

AVCaptureSession對(duì)象來(lái)執(zhí)行輸入設(shè)備和輸出設(shè)備之間的數(shù)據(jù)傳遞

AVCaptureSession

*iSession;

//當(dāng)前設(shè)備

AVCaptureDevice

*iDevice;

//輸入設(shè)備

AVCaptureDeviceInput

*iDeviceInput;

//照片輸出流

AVCaptureStillImageOutput

*iStillImageOutput;

//預(yù)覽圖層

AVCaptureVideoPreviewLayer

*iPreviewLayer;

}初始化各對(duì)象:-

(void)viewDidLoad

{

[super

viewDidLoad];

//點(diǎn)擊屏幕對(duì)焦

UITapGestureRecognizer

*tap

=

[[UITapGestureRecognizer

alloc]initWithTarget:self

action:@selector(focusTap:)];

[self.view

addGestureRecognizer:tap];

iSession

=

[[AVCaptureSession

alloc]init];

NSArray

*deviceArray

=

[AVCaptureDevice

devicesWithMediaType:AVMediaTypeVideo];

for

(AVCaptureDevice

*device

in

deviceArray)

{

//AVCaptureDevicePositionBack

后置攝像頭

//AVCaptureDevicePositionFront

前置攝像頭

if

(device.position

==

AVCaptureDevicePositionBack)

{

iDevice

=

device;

}

}

iSession.sessionPreset

=

[self

getSessionPresetForDevice:iDevice];

iDeviceInput

=

[[AVCaptureDeviceInput

alloc]initWithDevice:iDevice

error:nil];

////輸出設(shè)置。AVVideoCodecJPEG

輸出jpeg格式圖片

iStillImageOutput

=

[[AVCaptureStillImageOutput

alloc]init];

NSDictionary

*outputDic

=

[NSDictionary

dictionaryWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,

nil];

[iStillImageOutput

setOutputSettings:outputDic];

//更改這個(gè)設(shè)備設(shè)置的時(shí)候必須先鎖定設(shè)備,修改完后再解鎖,否則崩潰

[iDevice

lockForConfiguration:nil];

if

([iDevice

isFlashModeSupported:AVCaptureFlashModeOff])

{

[iDevice

setFlashMode:AVCaptureFlashModeOff];

}

if

([iDevice

isFocusModeSupported:AVCaptureFocusModeAutoFocus])

{

[iDevice

setFocusMode:AVCaptureFocusModeAutoFocus];

}

if

([iDevice

isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeAutoWhiteBalance])

{

[iDevice

setWhiteBalanceMode:AVCaptureWhiteBalanceModeAutoWhiteBalance];

}

[iDevice

unlockForConfiguration];

if

([iSession

canAddInput:iDeviceInput])

{

[iSession

addInput:iDeviceInput];

}

if

([iSession

canAddOutput:iStillImageOutput])

{

[iSession

addOutput:iStillImageOutput];

}

if

([iSession

canAddOutput:iVideoOutput])

{

[iSession

addOutput:iVideoOutput];

}

//初始化預(yù)覽圖層

iPreviewLayer

=

[[AVCaptureVideoPreviewLayer

alloc]initWithSession:iSession];

[iPreviewLayer

setVideoGravity:AVLayerVideoGravityResizeAspectFill];

iPreviewLayer.frame

=

CGRectMake(0,

60,

[UIScreen

mainScreen].bounds.size.width,

[UIScreen

mainScreen].bounds.size.height-160);

[self.iCameraView.layer

addSublayer:iPreviewLayer];

[iSession

startRunning];

}點(diǎn)擊按鈕拍照://拍照

-(void)takePictures{

AVCaptureConnection

*connection

=

[iStillImageOutput

connectionWithMediaType:AVMediaTypeVideo];

if

(!connection)

{

NSLog(@"失敗");

return;

}

//設(shè)置焦距

[connection

setVideoScaleAndCropFactor:1];

[iStillImageOutput

captureStillImageAsynchronouslyFromConnection:connection

completionHandler:^(CMSampleBufferRef

imageDataSampleBuffer,

NSError

*error)

{

if

(imageDataSampleBuffer==NULL)

{

NSLog(@"NUll");

return

;

}

NSData

*data

=

[AVCaptureStillImageOutput

jpegStillImageNSDataRepresentation:imageDataSampleBuffer];

UIImage

*image

=

[UIImage

imageWithData:data];

}];

}image即為拍照所得圖片:設(shè)置session的AVCaptureSessionPreset屬性-(NSString

*)getSessionPresetForDevice:(AVCaptureDevice

*)device{

if

([device

supportsAVCaptureSessionPreset:AVCaptureSessionPreset3840x2160])

{

return

AVCaptureSessionPreset3840x2160;

}

else

if([device

supportsAVCaptureSessionPreset:AVCaptureSessionPreset1920x1080]){

return

AVCaptureSessionPreset1920x1080;

}

else

if

([device

supportsAVCaptureSessionPreset:AVCaptureSessionPreset1280x720]){

return

AVCaptureSessionPreset1280x720;

}

else

if

([device

supportsAVCaptureSessionPreset:AVCaptureSessionPreset640x480]){

return

AVCaptureSessionPreset640x480;

}

else

if

([device

supportsAVCaptureSessionPreset:AVCaptureSessionPreset352x288]){

return

AVCaptureSessionPreset352x288;

}

else

if

([device

supportsAVCaptureSessionPreset:AVCaptureSessionPresetHigh]){

return

AVCaptureSessionPresetHigh;

}

else

if

([device

supportsAVCaptureSessionPreset:AVCaptureSessionPresetMedium]){

return

AVCaptureSessionPresetMedium;

}

else{

return

AVCaptureSessionPresetLow;

}

}設(shè)置閃光燈:-

(IBAction)iFlashBtn:(id)sender

{

[iDevice

lockForConfiguration:nil];

if

(iDevice.flashMode

==

AVCaptureFlashModeOff)

{

if

([iDevice

isFlashModeSupported:AVCaptureFlashModeOn])

{

[iDevice

setFlashMode:AVCaptureFlashModeOn];

[self.iFlashBtn

setBackgroundImage:[UIImage

imageNamed:@"flashBtn"]

forState:UIControlStateNormal];

}

}

else

if

(iDevice.flashMode

==

AVCaptureFlashModeOn){

if

([iDevice

isFlashModeSupported:AVCaptureFlashModeOff])

{

[iDevice

setFlashMode:AVCaptureFlashModeOff];

[self.iFlashBtn

setBackgroundImage:[UIImage

imageNamed:@"flashOffBtn"]

forState:UIControlStateNormal];

}

}

[iDevice

unlockForConfiguration];

}切換前置攝像頭與后置攝像頭:-

(IBAction)iChangeBtn:(id)sender

{

NSArray

*array

=

[AVCaptureDevice

devicesWithMediaType:AVMediaTypeVideo];

AVCaptureDevice

*newDevice

=

nil;

AVCaptureDeviceInput

*newDeviceInput

=

nil;

CATransition

*animation

=

[CATransition

animation];

animation.duration

=

0.5f;

animation.timingFunction

=

[CAMediaTimingFunction

functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

animation.type

=

@"oglFlip";

if

(iDevice.position

==

AVCaptureDevicePositionBack)

{

animation.subtype

=

kCATransitionFromLeft;

for

(AVCaptureDevice

*device

in

array)

{

if

(device.position

==

AVCaptureDevicePositionFront)

{

newDevice

=

device;

}

}

}

else

if

(iDevice.position

==

AVCaptureDevicePositionFront){

animation.subtype

=

kCATransitionFromRight;

for

(AVCaptureDevice

*device

in

array)

{

if

(device.position

==

AVCaptureDevicePositionBack)

{

newDevice

=

device;

}

}

}

newDeviceInput

=

[AVCaptureDeviceInput

deviceInputWithDevice:newDevice

error:nil];

[iPreviewLayer

addAnimation:animation

forKey:nil];

if

(newDeviceInput!=nil)

{

[iSession

beginConfiguration];

[iSession

removeInput:iDeviceInput];

iSession.sessionPreset

=

[self

getSessionPresetForDevice:newDevice];

if

([iSession

canAddInput:newDeviceInput])

{

[iSession

addInput:newDeviceInput];

iDeviceInput

=

newDeviceInput;

iDevice

=

newDevice;

}

else

{

[iSession

addInput:iDeviceInput];

}

[iSession

commitConfiguration];

}

}點(diǎn)擊屏幕對(duì)焦://點(diǎn)擊屏幕對(duì)焦

-(void)focusTap:(UIGestureRecognizer

*)tap{

CGPoint

tapPoint

=

[tap

locationInView:self.view];

float

Y

=

tapPoint.y;

if

(Y<60

||

Y>([UIScreen

mainScreen].bounds.size.height-100))

{

retu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論