要在 iOS 4 上控制相機的 LED 閃光燈其實並不困難,使用 AV Foundation 就能輕易實現,在之前的文章 Camera / 攝影機畫面的擷取方式-前篇,我們已經使用 AV Foundation 來擷取 Camera,現在我們一樣使用此方法,只是不將圖片輸出,而是打開相機的 LED 閃光燈,其程式碼如下。(View-based Template)
首先是環境設定,加入 AVFoundation 的 Framework,加入的方法是在 Groups & Files 內的專案名稱上按下右鍵 > Add > Existing Frameworks,之後選擇需要的 framework 並 Add 即可。
在加入 Framework 之後,還必須要匯入 AVFoundation 的標頭檔。#import <AVFoundation/AVFoundation.h>
接下來就是相機的 LED 閃光燈的控制方式了,你可以使用 Switch 或是自行定義的按鈕與和布林變數等來進行相關操作。
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//建立session
session = [[AVCaptureSession alloc] init];
//建立與設定device input session
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
[session addInput:input];
//設定outpit
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
[session addOutput:output];
//啟動session的configuration
[session beginConfiguration];
[device lockForConfiguration:nil];
//開啟LED燈
[device setTorchMode:AVCaptureTorchModeOn];
[device unlockForConfiguration];
[session commitConfiguration];
//啟動session
[session startRunning];
[output release];
上述程式碼是將 session 建立好之後設定開啟 LED 閃光燈,並且讓 session 持續運行, LED 閃光燈 就會保持在 always on 的狀態,如果要關閉 LED 閃光燈只要將 session 停止即可。
//停止session
[session stopRunning];
最後按照本範例的寫法,如果你將 LED 閃光燈狀態設定在 AVCaptureTorchModeAuto 在開啟開關時如果光線夠暗 LED 閃光燈才會自動開啟,而判斷光線明暗的時間點只有在開啟開關的那一瞬間,即便是 session 持續運行環境光線夠暗 LED 閃光燈也不會自動啟動。
沒有留言:
張貼留言