萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> ios >> IOS打開系統相機的閃光燈

IOS打開系統相機的閃光燈

   今天給大家分享一下如何調用iphone的拍照功能和打開閃光燈,有些代碼我也不太理解,很多是在網上借鑒其他人的。

  IOS有兩種的拍照和視頻的方式:

  1.直接使用UIImagePickerController,這個類提供了一個簡單便捷的拍照與選擇圖片庫裡圖片的功能。

  2.另一種是通過AVFoundation.framework框架完全自定義拍照的界面和選擇圖片庫界面。我只做了第一種,就先給大家介紹第一種做法:

  一、首先調用接口前,我們需要先判斷當前設備是否支持UIImagePickerController,用isSourceTypeAvailable:來判斷是否可用

  二、查看符合的媒體類型,這個時候我們調用availableMediaTypeForSourceType:判斷

  在調用UIImagePickerController時我們需要加入他的兩個代理方法:

  UINavigationControllerDelegate和UIImagePickerControllerDelegate,在調用攝像頭的時候還可以調閃光燈,一會代碼裡有。

  要調用閃光燈需要先建一個AVCaptureSession類的實例對象:

   代碼如下:

  // Created by 張茫原 on 13-1-23.

  // Copyright (c) 2013年 張茫原. All rights reserved.

  //

  #import

  //調用閃光燈調用框架

  #import

  @interface CameraViewController : UIViewController

  {

  AVCaptureSession * _AVSession;//調用閃光燈的時候創建的類

  }

  @property(nonatomic,retain)AVCaptureSession * AVSession;

  @end

  在.m的- (void)viewDidLoad裡建立4Button,Camera調用相機、Library調用圖片庫、flashlight打開閃光燈、close關閉閃光燈,這裡創建Button的代碼我就不再寫了。

   代碼如下:

  //打開相機

  -(void)addCarema

  {

  //判斷是否可以打開相機,模擬器此功能無法使用

  if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

  UIImagePickerController * picker = [[UIImagePickerController alloc]init];

  picker.delegate = self;

  picker.allowsEditing = YES; //是否可編輯

  //攝像頭

  picker.sourceType = UIImagePickerControllerSourceTypeCamera;

  [self presentModalViewController:picker animated:YES];

  [picker release];

  }else{

  //如果沒有提示用戶

  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你沒有攝像頭" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];

  [alert show];

  }

  }

  打開相機後,然後需要調用UIImagePickerControllerDelegate裡的方法,拍攝完成後執行的方法和點擊Cancel之後執行的方法:

   代碼如下:

  //拍攝完成後要執行的方法

  -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

  {

  //得到圖片

  UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];

  //圖片存入相冊

  UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

  [self dismissModalViewControllerAnimated:YES];

  }

  //點擊Cancel按鈕後執行方法

  -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

  {

  [self dismissModalViewControllerAnimated:YES];

  }

  調用相機照片和保存到圖片庫已經完成。

  接著介紹打開照片庫:

  代碼如下:

  -(void)openPicLibrary

  {

  //相冊是可以用模擬器打開的

  if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

  UIImagePickerController * picker = [[UIImagePickerController alloc]init];

  picker.delegate = self;

  picker.allowsEditing = YES;//是否可以編輯

  //打開相冊選擇照片

  picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

  [self presentModalViewController:picker animated:YES];

  [picker release];

  }else{

  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你沒有攝像頭" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];

  [alert show];

  }

  }

  //選中圖片進入的代理方法

  -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

  {

  [self dismissModalViewControllerAnimated:YES];

  }

  調用閃光燈的代碼,由於我也不是很理解,所以沒法加注釋,但是已經親測可用,但是調閃光燈時有一個算是bug吧,閃光燈會閒一下,然後再一直亮

   代碼如下:

  -(void)openFlashlight

  {

  AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

  if (device.torchMode == AVCaptureTorchModeOff) {

  //Create an AV session

  AVCaptureSession * session = [[AVCaptureSession alloc]init];

  // Create device input and add to current session

  AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

  [session addInput:input];

  // Create video output and add to current session

  AVCaptureVideoDataOutput * output = [[AVCaptureVideoDataOutput alloc]init];

  [session addOutput:output];

  // Start session configuration

  [session beginConfiguration];

  [device lockForConfiguration:nil];

  // Set torch to on

  [device setTorchMode:AVCaptureTorchModeOn];

  [device unlockForConfiguration];

  [session commitConfiguration];

  // Start the session

  [session startRunning];

  // Keep the session around

  [self setAVSession:self.AVSession];

  [output release];

  }

  }

  -(void)closeFlashlight

  {

  [self.AVSession stopRunning];

  [self.AVSession release];

  }

  以上所述就是本文的全部內容了,希望大家能夠喜歡。

copyright © 萬盛學電腦網 all rights reserved